爬虫过滑块

以某网站为例进行过滑块,注意两点:

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()

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰魄雕狼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值