- 셀레늄과 크롤러의 관계는 무엇입니까?
-웹 사이트에서 동적으로로드 된 데이터에 대한 편리한 액세스-
편리한 시뮬레이션 로그인 - 셀레늄이란?
- 브라우저 기반 자동화 모듈
- 셀레늄 사용 과정 :
-
셀레늄 설치
-
브라우저 설치 드라이버 다운로드 (예 : 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) 생성
- 개발 문서 다운로드 샘플 코드
- 사용 과정의 공식 웹 사이트 : http://www.chaojiying.com/about.html
-
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 사용에 대한 이전 기사를 참조 할 수 있습니다. 여기에서 인증 코드 이미지는 주로 스크린 샷 작업용입니다. 전체 페이지가 스크린 샷이 된 후 인증 코드가 정의됩니다. 사진이있는 영역을 분할 한 다음 읽고 클릭하여 인증 코드 사진 인식을 완료합니다.