셀레늄의 다양한 사용 및 시뮬레이션 된 12306 로그인

  • 셀레늄과 크롤러의 관계는 무엇입니까?
    -웹 사이트에서 동적으로로드 된 데이터에 대한 편리한 액세스-
    편리한 시뮬레이션 로그인
  • 셀레늄이란?
    • 브라우저 기반 자동화 모듈
  • 셀레늄 사용 과정 :
    • 셀레늄 설치

    • 브라우저 설치 드라이버 다운로드 (예 : Google)

      • 다운로드 경로 : http://chromedriver.storage.googleapis.com/index.html
      • 드라이버와 브라우저 간의 매핑 관계 : http://blog.csdn.net/huilan_same/article/details/51896672
      • 브라우저 자동화를 기반으로 운영 코드를 작성하고
        Baidu에 Lufei Xuecheng을 입력하여 찾을 수 있습니다.
    • Selenium은 iframe (범위)을 처리합니다 .

      • iframe 태그에 위치 지정 태그가있는 경우 bro.switch_to.iframe (id)를 사용해야합니다.
      • 액션 체인 (끌기) : selenium.webdriver에서 가져 오기 ActionChins
        • 개체 인스턴스화 : ActionChins (bro)
        • click_and_hold (div) : 길게 누르고 클릭 작업
        • move_by_offset (x, y)
        • perform () 동적 체인을 즉시 실행
        • action.release () 액션 체인 객체 해제
    • 12306 Simulated Landing
      -Super Eagle (이전 기사에서 소개 했으므로 너무 많은 설명은하지 않겠습니다)

      • 사용 과정의 공식 웹 사이트 : http://www.chaojiying.com/about.html
        • 등기
        • 로그인
          • 질문 포인트 쿼리 재충전
          • 소프트웨어 (ID) 생성
          • 개발 문서 다운로드 샘플 코드
    • 12306 시뮬레이션 로그인 코딩 프로세스

      • 셀레늄을 사용하여 랜딩 페이지 열기
      • 현재 셀레늄이 연 페이지의 스크린 샷 찍기
      • 현재 사진의 로컬 영역, 즉 인증 코드 영역을 자릅니다.
        • 이점 : 확인 코드 사진과 시뮬레이션 된 로그인 간의 일대일 통신
      • 인증 코드 인식을 위해 Super Eagle 사용 (관련 좌표로 돌아 가기)
      • 관련 좌표를 클릭하십시오
      • 동작 확인 코드 이미지 관련 코드
        먼저 세레 움 기본 사용 코드를 입력합니다.
from selenium import  webdriver
from lxml import etree
from time import sleep
#实例化浏览器兑现,传入浏览器的驱动程序
bro = webdriver.Chrome(executable_path='./chromedriver')
#让浏览器发起一个指定url对应请求
bro.get('http://125.35.6.84:81/xk/')
page_text = bro.page_source

#解析企业名称
tree = etree.HTML(page_text)
li_list = tree.xpath('//ul[@id="gzlist"]/li')
for li in li_list:
    name = li.xpath('./dl/@title')[0]
    print(name)
sleep(5)
bro.quit()

코드 실행 결과의 일부 사진 :
여기에 사진 설명 삽입
Baidu에서 찾을 수있는 Senleium의 자동화 된 작업을 살펴 ​​보겠습니다.

from selenium import webdriver
from time import sleep
#设置驱动程序
bro = webdriver.Chrome('./chromedriver')
bro.get('http://taobao.com/')
#标签定位
serach_input = bro.find_element_by_id('q')
#标签交互
serach_input.send_keys('Ipone')
#执行一组js程序
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
sleep(3)
#点击按钮
btn = bro.find_element_by_class_name('btn-search')
btn.click()

bro.get('http://www.baidu.com/')
bro.back()
sleep(2)
bro.forward()
sleep(2)
bro.quit()

효과를 확인하기 위해 직접 실행할 수 있으며 더 이상 결과를 재생하지 않습니다.
다음은 QQ 로그인을 시뮬레이트하는 코드입니다. 물론 QQ를 입력하지 않겠습니다. 최종 결과는 확실히 로그인 실패입니다. 자신의 QQ와 비밀번호를 입력 한 다음 테스트 할 수 있습니다.

from selenium import webdriver
from time import sleep
#设置驱动程序
bro = webdriver.Chrome('./chromedriver')
bro.get('http://taobao.com/')
#标签定位
serach_input = bro.find_element_by_id('q')
#标签交互
serach_input.send_keys('Ipone')
#执行一组js程序
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
sleep(3)
#点击按钮
btn = bro.find_element_by_class_name('btn-search')
btn.click()

bro.get('http://www.baidu.com/')
bro.back()
sleep(2)
bro.forward()
sleep(2)
bro.quit()

마지막은 우리의 하이라이트 인 12306의 시뮬레이션 된 로그인입니다.이 인증 코드 인식은 더 복잡한 것이기 때문입니다.

from selenium import webdriver
from time import sleep
from PIL import Image
from selenium.webdriver import ActionChains
#超级鹰下载示例代码
import requests
from hashlib import md5
class Chaojiying_Client(object):
    def __init__(self, username, password, soft_id):
        self.username = username
        password =  password.encode('utf8')
        self.password = md5(password).hexdigest()
        self.soft_id = soft_id
        self.base_params = {
    
    
            'user': self.username,
            'pass2': self.password,
            'softid': self.soft_id,
        }
        self.headers = {
    
    
            'Connection': 'Keep-Alive',
            'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
        }

    def PostPic(self, im, codetype):
        """
        im: 图片字节
        codetype: 题目类型 参考 http://www.chaojiying.com/price.html
        """
        params = {
    
    
            'codetype': codetype,
        }
        params.update(self.base_params)
        files = {
    
    'userfile': ('ccc.jpg', im)}
        r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
        return r.json()

    def ReportError(self, im_id):
        """
        im_id:报错题目的图片ID
        """
        params = {
    
    
            'id': im_id,
        }
        params.update(self.base_params)
        r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
        return r.json()
#设置驱动
bro = webdriver.Chrome('./chromedriver')
#获取网页url
bro.get('https://kyfw.12306.cn/otn/resources/login.html')
sleep(1)
#标签定位到账号登陆,输入账号密码
login_in = bro.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a')
login_in.click()
sleep(2)
#下载验证码图片并保存
#使用bro.save_screenshot('./12306.jpg')进行整张页面的截取并存到本地
bro.save_screenshot('./12306.png')
#确定验证码图片的左上角和右下角坐标(确定裁剪区域)
code_img_ele = bro.find_element_by_xpath('//*[@id="J-loginImg"]')#定位图片
location = code_img_ele.location #验证码图片的左上角坐标下x,y
print(location)
size = code_img_ele.size    #验证码图片的长和宽
print(size)
#确定左上角和右下角坐标
rangle =(int(location['x']),int(location['y']),int(location['x']+size['width']),int(location['y']+size['height']))
#验证码图片区域确定下来了
#进行分割
i = Image.open('./12306.png')
code_ing_name = ('./12306yanzhengma.png')
#crop根据指定区域进行裁剪
frame = i.crop(rangle)
frame.save(code_ing_name)
#识别验证码图片
chaojiying = Chaojiying_Client('a1372431588', '970110yy', '905838')	#用户中心>>软件ID 生成一个替换 96001
im = open('./12306yanzhengma.png', 'rb').read()													#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
print(chaojiying.PostPic(im, 9004)['pic_str'])
sleep(2)
result = chaojiying.PostPic(im, 9004)['pic_str']
all_list =[]#要存储即将被点击的点的坐标[[x1,y1],[x2,y2]]
if '|' in result:
    list_1 = result.split('|')
    print(list_1)
    count_1=len(list_1)
    print(count_1)
    for i in range(count_1):
        xy_list = []
        x = int(list_1[i].split(',')[0])
        y = int(list_1[i].split(',')[1])
        xy_list.append(x)
        xy_list.append(y)
        all_list.append(xy_list)
else:
    x = int(result.split(',')[0])
    y = int(result.split(',')[1])
    xy_list = []
    xy_list.append(x)
    xy_list.append(y)
    all_list.append(xy_list)
print(all_list)
code_img = bro.find_element_by_xpath('//*[@id="J-loginImg"]')
action = ActionChains(bro)
for l in all_list:
    x = l[0]
    y = l[1]
    ActionChains(bro).move_to_element_with_offset(code_img,x,y).click().perform()
username = bro.find_element_by_id('J-userName')
username.send_keys('a1372431588')
sleep(2)
passward = bro.find_element_by_id('J-password')
passward.send_keys('970110yy')
sleep(2)
#点击登录按钮
login = bro.find_element_by_id('J-login')
login.click()

sleep(5)
bro.quit()

코드의 주석은 매우 명확하여 누구나 이해할 수 있다고 믿습니다. Super Eagle 사용에 대한 이전 기사를 참조 할 수 있습니다. 여기에서 인증 코드 이미지는 주로 스크린 샷 작업용입니다. 전체 페이지가 스크린 샷이 된 후 인증 코드가 정의됩니다. 사진이있는 영역을 분할 한 다음 읽고 클릭하여 인증 코드 사진 인식을 완료합니다.

추천

출처blog.csdn.net/qwerty1372431588/article/details/106735934