IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> selenium模拟登录豆瓣(带滑动验证码) -> 正文阅读

[开发测试]selenium模拟登录豆瓣(带滑动验证码)

最近学习爬虫基础模拟登录豆瓣网站,记录下。网络比较卡,加的隐式等待时间比较多

全部代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains

def get_tracks(distance):
    """
    拿到移动轨迹,模仿人的滑动行为,先匀加速后匀减速
    匀变速运动基本公式:
    ①v = v0+at
    ②s = v0t+1/2at^2
    """
    #初速度
    v = 0
    #单位时间为0.3s来统计轨迹,轨迹即0.3内的位移
    t = 0.31
    #位置/轨迹列表,列表内的一个元素代表0.3s的位移
    tracks = []
    #当前位移
    current = 0
    #到达mid值开始减速
    mid = distance*4/5
    while current < distance:
        if current < mid:
            #加速度越小,单位时间内的位移越小,模拟的轨迹就越多越详细
            a = 2
        else:
            a = -3
        #初速度
        v0 = v
        #0.3秒内的位移
        s = v0*t+0.5*a*(t**2)
        #当前的位置
        current += s
        #添加到轨迹列表
        tracks.append(round(s))
        #速度已经到达v,该速度作为下次的初速度
        v = v0+a*t
    return tracks

options = webdriver.ChromeOptions()
options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"

options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
# options.add_argument('window-size=1920x3000') #指定浏览器分辨率
options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug
options.add_argument('--hide-scrollbars') #隐藏滚动条, 应对一些特殊页面
# options.add_argument('blink-settings=imagesEnabled=false') #不加载图片, 提升速度
# options.add_argument('--headless') #浏览器不提供可视化页面

driver = webdriver.Chrome("chromedriver.exe", options=options)

driver.get("http://www.douban.com/")

#切换到登陆框架中来
driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])
driver.implicitly_wait(2)
driver.find_element(By.CLASS_NAME, "account-tab-account").click()

# 输入账号密码
input1 = driver.find_element_by_id("username")
input1.clear()  #清空输入框默认内容
input1.send_keys("账号")
input2 = driver.find_element_by_id("password")
input2.clear()
input2.send_keys("密码")

#登陆点击
driver.find_element(By.CLASS_NAME, "btn-account").click()
driver.implicitly_wait(5)
#如果定位节点在标签iframe内,那么则必须使用switch_to进行iframe的切换
driver.switch_to.frame(driver.find_element_by_id("tcaptcha_iframe"))

#按住开始滑动位置按钮-先移动180个像素
element = driver.find_elements_by_xpath('//div[@id="tcaptcha_drag_thumb"]')[0]
driver.implicitly_wait(2)
ActionChains(driver).move_to_element(element).click_and_hold(element).perform()
# move_to_element_with_offset()移动到距离某个元素左上角多少距离的位置
ActionChains(driver).move_to_element_with_offset(to_element=element,xoffset=180,yoffset=0).perform()

#使用加速度函数移动剩下的距离
tracks = get_tracks(26)
for track in tracks:    #开始移动move_by_offset()
    ActionChains(driver).move_by_offset(xoffset=track,yoffset=0).perform()

#延迟释放鼠标:release()
driver.implicitly_wait(2)
ActionChains(driver).release().perform()

driver.implicitly_wait(10)
# 生成登陆后快照
driver.save_screenshot("douban.png")
# 保存源码
with open("douban.html", "w", encoding='utf-8') as file:
    file.write(driver.page_source)
driver.quit()

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-11-28 11:35:22  更:2021-11-28 11:35:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 4:48:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码