以某网站为例进行过滑块,注意两点:
1,模拟轨迹
2,禁止浏览器对selenium的检测
代码如下:
import time
from time import sleep
# selenium:基于浏览器自动化的一个模块
from selenium import webdriver
import time
from selenium.webdriver import ActionChains
from PIL import Image
#防止浏览器对selenium的检测,否则过滑块时候,无论你怎么模拟人去过滑块,还是会被检测出来,而导致错误
options=webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
bro=webdriver.Chrome(executable_path=r'D:\pycharm\PyCharm Community Edition 2020.1.2\bin\chromedriver.exe',options=options)
url = 'https://etax.guangdong.chinatax.gov.cn'
bro.get(url) # 用户发起请求
# 定位弹窗标签
tanchuang = bro.find_element_by_xpath('//*[@id="layui-layer1"]/div[2]/a')
time.sleep(1)
#点击关闭操作
tanchuang.click()
time.sleep(2)
#定位我要查询标签
chaxun=bro.find_element_by_xpath('/html/body/div[1]/div[3]/ul/a[3]')
#点击查询标签
chaxun.click()
time.sleep(1)
#定位密码登录按钮
mmdenglu=bro.find_element_by_xpath('//*[@id="mmdl_QieHuan"]')
mmdenglu.click()
time.sleep(1)
#社会信用代码
shuru1=bro.find_element_by_xpath('//*[@id="shxydmOrsbh"]')
shuru1.send_keys('91440606MA5383U01E')
time.sleep(1)
#用户名
shuru2=bro.find_element_by_xpath('//*[@id="userNameOrSjhm"]')
shuru2.send_keys('13277886658')
time.sleep(1)
#密码
shuru3=bro.find_element_by_xpath('//*[@id="passWord"]')
shuru3.send_keys('Aa123456')
time.sleep(1)
#过滑块,先定位滑块,然后获取滑块坐标,然后将滑块执行鼠标操作,纵坐标不变,横坐标向右移一定像素单位,
huakuai=bro.find_element_by_xpath('//*[@id="nc_1_n1z"]')
def get_track(distance): # distance为传入的总距离
# 移动轨迹
track=[]
# 当前位移
current=0
# 减速阈值
mid=distance*4/5
# 计算间隔
t=1
# 初速度
v=3
while current<distance:
if current<mid:
# 加速度为2
a=4
else:
# 加速度为-2
a=-3
v0=v
# 当前速度
v=v0+a*t
# 移动距离
move=v0*t+1/2*a*t*t
# 当前位移
current+=move
# 加入轨迹
track.append(round(move))
return track
def move_to_gap(slider,tracks): # slider是要移动的滑块,tracks是要传入的移动轨迹
ActionChains(bro).click_and_hold(slider).perform()
for x in tracks:
ActionChains(bro).move_by_offset(xoffset=x,yoffset=0).perform()
time.sleep(0.3)
ActionChains(bro).release().perform()
if __name__ == '__main__':
move_to_gap(huakuai,get_track(340))
#进行登录
denglu=bro.find_element_by_xpath('//*[@id="upLoginButton"]')
denglu.click()
time.sleep(1)
#点击一户式查询
y_h_s=bro.find_element_by_xpath('//*[@id="topTabs"]/div[1]/div[4]/div/div/div[1]/a')
y_h_s.click()
time.sleep(2)
bro.quit()