Python 자동화 천안 검사 데이터 의 실현

먼저 계 정 비밀 번 호 를 등록 하고 계 정 비밀 번 호 를 통 해 로그 인 하 며 슬라이더 검증 을 통 해 검색 키 워드 를 자동 으로 입력 하여 페이지 를 넘 겨 데 이 터 를 찾 아 엑셀 파일 에 저장 해 야 한다.
코드 가 실 행 될 때 슬라이더 인증 이 자주 통과 되 지 않 고 먹 히 지만 exe 로 포장 하여 실행 하 는 데 문제 가 없 음 을 발견 하고 100%성공 적 으로 로그 인 하 였 습 니 다.여러분 이 이 문 제 를 알 고 있다 면 저 와 공유 해 주세요.감사합니다!

잔말 말고 코드 올 려.

# coding=utf-8
from selenium import webdriver
import time
from PIL import Image, ImageGrab
from io import BytesIO
from selenium.webdriver.common.action_chains import ActionChains
import os
import sys
import re
import xlwt
import urllib
import datetime
 
'''
         ,        
'''
 
#        
def app_path():
    if hasattr(sys, 'frozen'):
        return os.path.dirname(os.path.dirname(os.path.dirname(sys.executable))) #  pyinstaller    exe  
    return os.path.dirname(__file__)
 
app_path = app_path()
 
ready_list = []
 
#      
def set_style(name,height,bold=False):
    style = xlwt.XFStyle()
    font = xlwt.Font()
    font.name = name
    # font.bold = bold
    font.color_index = 4
    font.height = height
    style.font = font
    return style
 
#  excel
f = xlwt.Workbook()
sheet1 = f.add_sheet('     ',cell_overwrite_ok=True)
row0 = ["    ","     ","    ","    ","  ","  ","  "]
for i in range(0, len(row0)):
    sheet1.write(0, i, row0[i], set_style('Times New Roman', 220, True))
 
#   
def write_col(data, row, col):
    for i in range(0,len(data)):
        sheet1.write(row,col,data[i],set_style('Times New Roman',220,True))
        row = row + 1
 
def parse_save_data(all_list):
    row = 1
    for data in all_list:
        #     
        name_list = re.findall(r'<div class="info">(.*?)</div>',data)
        print(name_list)
 
        #   
        tag_list = re.findall(r'<div class="tag-list">(.*)</div><div class="info row text-ellipsis">', data)
        tags = []
        for list in tag_list:
            tag = re.findall(r'<div class="tag-common -primary -new">(.*?)</div>', list)
            tags.append(tag)
        # print(tags)
 
        #      
        legal_list = re.findall(r'<a title="(.*?)" class="legalPersonName link-click"',data)
        # print(legal_list)
 
        #     
        registered_capital_list  = re.findall(r'    :<span title="(.*?)">',data)
        # print(registered_capital_list)
 
        #     
        date_list  = re.findall(r'    :<span title="(.*?)">',data)
        # print(date_list)
 
        #   
        tel_list  = re.findall(r'<div class="triangle" style=""></div><div class=""></div></div></div><span>(.*?)</span>',data)
        # print(tel_list)
 
        #   
        email_list  = re.findall(r'  :</span><span>(.*?)</span>',data)
        # print(email_list)
 
        #   
        adress_list  = re.findall(r'  :</span><span>(.*?)</span>',data)
        # print(adress_list)
        write_col(name_list,row,0)
        # write_col(tags,1)
        write_col(legal_list,row,1)
        write_col(registered_capital_list,row,2)
        write_col(date_list,row,3)
        write_col(tel_list,row,4)
        write_col(email_list,row,5)
        write_col(adress_list,row,6)
 
        row = row + len(name_list)
 
    s = str([datetime.datetime.now()][-1])
    name = '/     ' + s[:10] + s[-6:] + '.xls'
    f.save(app_path + name)
 
def get_track(distance):
    """
               
    :param distance:    
    :return:     
    """
    #     
    track = []
    #     
    current = 0
    #     
    mid = distance * 2 / 5
    #     
    t = 0.2
    #    
    v = 1
 
    while current < distance:
        if current < mid:
            #      2
            a = 5
        else:
            #      3
            a = -2
        #    v0
        v0 = v
        #     v = v0 + at
        v = v0 + a * t
        #     x = v0t + 1/2 * a * t^2
        move = v0 * t + 1 / 2 * a * t * t
        #     
        current += move
        #     
        track.append(round(move))
    return track
 
 
def autologin(account, password):
    count = 0
    global driver,page,keywords
    driver.get('https://www.tianyancha.com/?jsid=SEM-BAIDU-PP-SY-000873&bd_vid=7864822754227867779')
    time.sleep(3)
    try:
        driver.find_element_by_xpath('//*[@id="tyc_banner_close"]').click()
    except:
        pass
 
    driver.find_element_by_xpath('//div[@class="nav-item -home  -p10"]/a').click()
    time.sleep(3)
    #           id xpath      ,     id      ,       class  
    driver.find_element_by_xpath('.//div[@class="sign-in"]/div/div[2]').click()
    time.sleep(1)
    accxp = './/input[@id="mobile"]'
    pasxp = './/input[@id="password"]'
    driver.find_element_by_xpath(accxp).send_keys(account)
    driver.find_element_by_xpath(pasxp).send_keys(password)
    clixp = './/div[@class="sign-in"]/div[2]/div[2]'
    driver.find_element_by_xpath(clixp).click()
    #                
    time.sleep(2)
    img = driver.find_element_by_xpath('/html/body/div[10]/div[2]/div[2]/div[1]/div[2]/div[1]')
    time.sleep(0.5)
    #          
    location = img.location
    size = img.size
    #                  
    top, bottom, left, right = location['y'], location['y'] + size['height'], location['x'], location['x'] + size[
        'width']
    #        (    )
    screenshot = driver.get_screenshot_as_png()
    screenshot = Image.open(BytesIO(screenshot))
    captcha1 = screenshot.crop((left, top, right, bottom))
    print('--->', captcha1.size)
    captcha1.save('captcha1.png')
    #        (    )
    driver.find_element_by_xpath('/html/body/div[10]/div[2]/div[2]/div[2]/div[2]').click()
    time.sleep(4)
    img1 = driver.find_element_by_xpath('/html/body/div[10]/div[2]/div[2]/div[1]/div[2]/div[1]')
    time.sleep(0.5)
    location1 = img1.location
    size1 = img1.size
    top1, bottom1, left1, right1 = location1['y'], location1['y'] + size1['height'], location1['x'], location1['x'] + \
                                   size1['width']
    screenshot = driver.get_screenshot_as_png()
    screenshot = Image.open(BytesIO(screenshot))
    captcha2 = screenshot.crop((left1, top1, right1, bottom1))
    captcha2.save('captcha2.png')
    #      
    left = 55  #            
    for i in range(left, captcha1.size[0]):
        for j in range(captcha1.size[1]):
            #            
            pixel1 = captcha1.load()[i, j]
            pixel2 = captcha2.load()[i, j]
            threshold = 60
            if abs(pixel1[0] - pixel2[0]) < threshold and abs(pixel1[1] - pixel2[1]) < threshold and abs(
                    pixel1[2] - pixel2[2]) < threshold:
                pass
            else:
                left = i
    print('    ', left)
    #       
    left -= 52
    #     
    track = get_track(left)
    print('    ', track)
    # track += [5,4,5,-6, -3,5,-2,-3, 3,6,-5, -2,-2,-4]  #        ,       
    #     
    slider = driver.find_element_by_xpath('/html/body/div[10]/div[2]/div[2]/div[2]/div[2]')
    ActionChains(driver).click_and_hold(slider).perform()
    for x in track:
        ActionChains(driver).move_by_offset(xoffset=x, yoffset=0).perform()
    time.sleep(0.2)
    ActionChains(driver).release().perform()
    time.sleep(1)
    try:
        if driver.find_element_by_xpath('/html/body/div[10]/div[2]/div[2]/div[2]/div[2]'):
            print('     ,   ')
            # driver.delete_all_cookies()
            # driver.refresh()
            # autologin(driver, account, password)
        else:
            print('login success')
    except:
        print('login success')
 
    time.sleep(0.2)
    driver.find_element_by_xpath('.//input[@id="home-main-search"]').send_keys(keywords)
    driver.find_element_by_xpath('.//div[@class="input-group home-group"]/div[1]').click()
 
    #    
    data = driver.find_element_by_xpath('.//div[@class="result-list sv-search-container"]').get_attribute('innerHTML')
    count = count + 1
 
    #        
    ready_list.append(data)
 
    while count < page:
        #      
        # driver.find_element_by_xpath('./ul[@class="pagination"]]/li/a[@class="num -next"]').click()
        url = 'https://www.tianyancha.com/search/p{}?key={}'.format(count + 1,urllib.parse.quote(keywords))
        driver.get(url)
        time.sleep(2)
        data = driver.find_element_by_xpath('.//div[@class="result-list sv-search-container"]').get_attribute('innerHTML')
        count = count + 1
        ready_list.append(data)
 
    #       
    parse_save_data(ready_list)
    print('      ')
 
        # if __name__ == '__main__':
    # driver_path = 'C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe'
    # chromeoption = webdriver.ChromeOptions()
    # chromeoption.add_argument('--headless')
    # chromeoption.add_argument('user-agent='+user_agent)
 
keywords = input('      :')
account = input('        :')
password = input('        :')
page = int(input('       :'))
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
print('      。。。')
autologin(account, password)
 
exe 로 포장 하기(site-packages 는 python 가방 의 디 렉 터 리 로 바 꿔 야 합 니 다)

pyinstaller main.py -p D:\Anaconda3\Lib\site-packages

dist 디 렉 터 리 의 exe 를 최종 실행 합 니 다.

주의 사항
천 안 사 는 회원 을 개설 하지 않 고 4 페이지 의 내용 만 볼 수 있 기 때문에 회원 을 개설 해 야 한다.이것 은 돌아 가 려 면 따로 연구 해 야 한다.돈 을 충전 하고 비용 을 지불해 야 하기 때문에 해결 도 그리 간단 하지 않다.
여기 서 Python 자동화 천안 탐지 데이터 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 Python 자동화 천안 탐지 데이터 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기