Python爬虫-使用Selenium模拟百度登录

这篇具有很好参考价值的文章主要介绍了Python爬虫-使用Selenium模拟百度登录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

    前面我已经安装好了Selenium并模拟成功了一下打开百度页面并进行查询,让我这个python初学者信心倍增,今天再来试一试百度登录

正文

把打开百度的代码放到构造方法中

ps:那个文件目录是用于后面滑块验证图片保存的。

    def __init__(self):
        driver = webdriver.Chrome()
        driver.get('https://www.baidu.com/')
        driver.maximize_window()
        self.page = driver
        self.filename = 'G:\\scroll\\'

点击右上角的“登录”按钮,打开登录框,

Python爬虫-使用Selenium模拟百度登录

代码如下:

        driver = self.page
        driver.find_element(By.ID, 's-top-loginbtn').click()

 效果是这样:

Python爬虫-使用Selenium模拟百度登录

 输入用户名和密码,点击登录

        driver.find_element(By.ID, 'TANGRAM__PSP_11__userName').send_keys('用户名')
        driver.find_element(By.ID, 'TANGRAM__PSP_11__password').send_keys('密码')
        driver.find_element(By.ID, 'TANGRAM__PSP_11__submit').click()

运行之后,竟然出现了一个滑块验证窗口:

Python爬虫-使用Selenium模拟百度登录

 打算用selenium的鼠标事件,模拟拖拽滑块的功能

先获取滑块的id,发现id竟然是动态变化的,后面有个随机变化的数字

Python爬虫-使用Selenium模拟百度登录

没办法,只能使用xpath获取页面元素

/html/body/div[11]/div[1]/div/div[2]/div[2]

 再获取滑块要滑动的框的xpath

/html/body/div[11]/div[1]/div/div[2]/div[1]

并获取这个div元素的宽度,进行移动,代码如下

flybutton = driver.find_element(By.XPATH, '/html/body/div[11]/div[1]/div/div[2]/div[2]')
ActionChains(driver).move_to_element(flybutton).perform()

 flybutton_div = driver.find_element(By.XPATH, '/html/body/div[11]/div[1]/div/div[2]/div[1]')

print(flybutton_div.size['width'], flybutton_div.size['height'])

huakuia = ActionChains(driver)
huakuia.click_and_hold(flybutton).perform()

huakuia.move_by_offset(flybutton_div.size['width'], 0).perform()

huakuia.release()

运行了一下,效果是闪了一下,并没有滑动

思考良久,并查资料后看到一篇设置鼠标移动轨迹的文章,遂获得灵感,可能是移动的太快,被百度反爬工具发现了,于是每次5px循环的移动,

flybutton = driver.find_element(By.XPATH, '/html/body/div[11]/div[1]/div/div[2]/div[2]')
        ActionChains(driver).move_to_element(flybutton).perform()

        flybutton_div = driver.find_element(By.XPATH, '/html/body/div[11]/div[1]/div/div[2]/div[1]')

        print(flybutton_div.size['width'], flybutton_div.size['height'])

        huakuia = ActionChains(driver)
        huakuia.click_and_hold(flybutton).perform()
        x = flybutton_div.size['width']
        i = 0
        step = 5
        while i < x:
            i = i + step
            huakuia.move_by_offset(step, 0).perform()
            time.sleep(3)

        huakuia.release()

效果很好,哈哈~,我设置的移动一次休眠3秒,这个可以调快一些,不然心急的可能就认为没有生效。

Python爬虫-使用Selenium模拟百度登录

 滑动滑块是生效了,可是依然没有登录成功,因为系统要求的是把图片放正,并不是把滑块移动最右边

又进行了大量资料的查询,搜到一篇文章,是用python实现图片方向变换的功能,最关键的是里面实现了计算图片倾斜角度的计算,

地址是:python实现图片歪斜纠正+代码和注释

关键代码如下:

Python爬虫-使用Selenium模拟百度登录

继续进行代码改进

保存图片:

    def save_pic(self, file):
        pic_url = self.page.find_element(By.XPATH, '/html/body/div[11]/div[1]/div/div[1]/img').get_attribute('src')
         headers = {
             'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36'
         }
         res_s = requests.get(pic_url, headers=headers)
         data_s = res_s.content
         保存图片
         with open(file, 'wb') as f:
             f.write(data_s)

获得图片倾斜角度

  def get_angle(self, file):
        # 读取图像
        img = cv2.imread(file)
        # 二值化
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # 边缘检测
        edges = cv2.Canny(gray, 50, 150, apertureSize=3)

        # 霍夫变换,摘自https://blog.csdn.net/feilong_csdn/article/details/81586322
        lines = cv2.HoughLines(edges, 1, np.pi / 180, 0)
        for rho, theta in lines[0]:
            a = np.cos(theta)
            b = np.sin(theta)
            x0 = a * rho
            y0 = b * rho
            x1 = int(x0 + 1000 * (-b))
            y1 = int(y0 + 1000 * (a))
            x2 = int(x0 - 1000 * (-b))
            y2 = int(y0 - 1000 * (a))
        if x1 == x2 or y1 == y2:
            return 0
        t = float(y2 - y1) / (x2 - x1)
        # 得到角度后
        rotate_angle = math.degrees(math.atan(t))

改进后的滑块验证的代码如下:


        huakuia = ActionChains(driver)
        huakuia.click_and_hold(flybutton).perform()
        x = flybutton_div.size['width']
        i = 0
        step = 5
        while i < x:
            i = i + step
            huakuia.move_by_offset(step, 0).perform()
            time.sleep(3)
            filepath = self.filename + 'scroll' + str(i) + '.png'
            print(filepath)
            self.save_pic(filepath)
            angle = self.get_angle(filepath)
            print('current angle is : %s', angle)
            if math.fabs(angle) < 3:
                break


        print('scroll complete')
        huakuia.release()

运行之后,还是没有成功

最后发现计算的图片倾斜角度都是一样的,打开图片保存目录一看,是下面这样的: 

Python爬虫-使用Selenium模拟百度登录

原来相同一个图片,移动滑块旋转后保存的图片都是一样的,就是初始图片的样子, 怪不得失败了。。。

继续查资料,发现selenium有一个截图的功能,于是使用这个截图功能去保存旋转后的图片

        img = self.page.find_element(by=By.XPATH, value="/html/body/div[11]/div[1]/div/div[1]")
        data_s = img.screenshot(file)  # 截取后直接是二进制,无括号

保存图片后发现还是没有旋转前的图片,真是心累。。。。。

先记录在这里,后面再改进吧文章来源地址https://www.toymoban.com/news/detail-456736.html

到了这里,关于Python爬虫-使用Selenium模拟百度登录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 爬虫笔记--Selenium实现有验证码网站模拟登录

    代码如下: 一点说明: 安利个巨好用的识别验证码的库 ddddocr gitHub:https://github.com/sml2h3/ddddocr 可能会在版本上遇到问题,我的报错参考这篇文档解决:https://blog.csdn.net/zhuchengchengct/article/details/124854199 我用的版本作为参考:python是3.9.13,ddddocr是1.4.2 如有问题,欢迎大家批评

    2024年02月16日
    浏览(43)
  • Python之selenium,使用webdriver模拟登录网站(含验证码)

    前段时间做了一个小项目,其中有一段需要自动获取网站后台的数据,但是这个网站没有任何提供给开发者的API,所以只能靠自己去探索。 起初想着用发送请求的方式去模拟登陆,获取cookies,从而再获取网站后台数据,但是因为自己太菜了一些原因,放弃了这个方法。 后来

    2024年02月02日
    浏览(60)
  • Python爬虫入门:使用selenium库,webdriver库模拟浏览器爬虫,模拟用户爬虫,爬取网站内文章数据,循环爬取网站全部数据。

    *严正声明:本文仅限于技术讨论与分享,严禁用于非法途径。 目录 准备工具: 思路: 具体操作: 调用需要的库: 启动浏览器驱动: 代码主体:  完整代码(解析注释): Python环境; 安装selenium库; Python编辑器; 待爬取的网站; 安装好的浏览器; 与浏览器版本相对应的

    2023年04月24日
    浏览(53)
  • python爬虫进阶篇:Scrapy中使用Selenium模拟Firefox火狐浏览器爬取网页信息

    接着上一篇的笔记,Scrapy爬取普通无反爬、静态页面的网页时可以顺利爬取我们要的信息。但是大部分情况下我们要的数据所在的网页它是动态加载出来的(ajax请求后传回前端页面渲染、js调用function等)。这种情况下需要使用selenium进行模拟人工操作浏览器行为,实现自动化

    2024年02月04日
    浏览(73)
  • java爬虫遇到网页验证码怎么办?(使用selenium模拟浏览器并用python脚本解析验证码图片)

            笔者这几天在爬取数据的时候遇到了一个很闹心的问题,就是在我爬取数据的时候遇到了验证码,而这个验证码又是动态生成的,尝试了很多方法都没能绕开这个验证码问题。         我的解决方案是:使用selenium模拟浏览器行为,获取到动态生成的验证码后用

    2024年02月09日
    浏览(103)
  • python 爬虫热身篇 使用 requests 库通过 HTTP 读取网络数据,使用 pandas 读取网页上的表格,使用 Selenium 模拟浏览器操作

    在过去,收集数据是一项繁琐的工作,有时非常昂贵。机器学习项目不能没有数据。幸运的是,我们现在在网络上有很多数据可供我们使用。我们可以从 Web 复制数据来创建数据集。我们可以手动下载文件并将其保存到磁盘。但是,我们可以通过自动化数据收集来更有效地做

    2023年04月08日
    浏览(67)
  • Python爬虫(4)-Selenium模拟鼠标操作

    在Selenium4.2以后的版本里面鼠标的操作方法都封装在了ActionChains中需要时直接取即可。 使用方法就是调用ActionChains然后传入你需要点击的按钮的位置即可 ActionChains(driver).double_click(f1).perform() perform()的意思就是执行所有ActionChains中的动作 具体的操作方法如下 鼠标单击就是直接

    2024年01月19日
    浏览(48)
  • Python + Selenium 模拟登录jd

    最近有点时间,就随便找点东西弄弄,倒也碰到了一些问题,在此记录下 Python3.11.3 + selenium4.9.1 + opencv4.7 + PyAutoGUI0.9.54 + windows11 进入登录页面,登录方式有两种,这里直接定位点击账号登录即可 看到验证码的图片是base64格式的,可以通过src属性来获取,然后直接转成cv图片格

    2024年02月07日
    浏览(55)
  • python爬虫之selenium模拟浏览器

    之前在异步加载(AJAX)网页爬虫的时候提到过,爬取这种ajax技术的网页有两种办法:一种就是通过浏览器审查元素找到包含所需信息网页的真实地址,另一种就是通过selenium模拟浏览器的方法[1]。当时爬的是豆瓣,比较容易分析出所需信息的真实地址,不过一般大点的网站像

    2024年02月03日
    浏览(58)
  • 【python爬虫】设计自己的爬虫 4. 封装模拟浏览器 Selenium

    有些自动化工具可以获取浏览器当前呈现的页面的源代码,可以通过这种方式来进行爬取 一般常用的的有Selenium, playwright, pyppeteer,考虑到他们的使用有许多相同之处,因此考虑把他们封装到一套api中 先看基类 Selenium是一个自动化测试工具,利用它可以驱动浏览器完成特定

    2024年02月03日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包