资讯专栏INFORMATION COLUMN

python + selenium + chrome headless 的一些备忘

Elle / 1445人阅读

摘要:使用在中进行了一项使用浏览器的工作在此记录下遇到的问题以及解决方法入门参考中如何安装浏览器以及参考启动浏览器时常用的属性指定浏览器分辨率谷歌文档提到需要加上这个属性来规避隐藏滚动条应对一些特殊页面不加载图片提升速度

使用python3.6在Ubuntu中进行了一项使用Chrome headless浏览器的工作, 在此记录下遇到的问题以及解决方法.
入门?

参考 unning-selenium-with-headless-chrome

Ubuntu中如何安装chrome浏览器, 以及chromedriver?

参考 Installing ChromeDriver on Ubuntu

selenium启动浏览器时常用的属性
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("window-size=1920x3000") #指定浏览器分辨率
chrome_options.add_argument("--disable-gpu") #谷歌文档提到需要加上这个属性来规避bug
chrome_options.add_argument("--hide-scrollbars") #隐藏滚动条, 应对一些特殊页面
chrome_options.add_argument("blink-settings=imagesEnabled=false") #不加载图片, 提升速度
chrome_options.add_argument("--headless") #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
chrome_options.binary_location = r"/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary" #手动指定使用的浏览器位置
selenium如何连接到已经开启的浏览器?

需要在打开浏览器后, 获取浏览器的command_executor url, 以及session_id

opener.command_executor._url, opener.session_id #opener为webdriver对象

之后通过remote方式链接

from selenium import webdriver
opener = webdriver.Remote(command_executor=_url,desired_capabilities={}) #_url为上面的_url
opener.close() #这时会打开一个全新的浏览器对象, 先把新的关掉
opener.session_id = session_id #session_id为上面的session_id

之后对opener的任何操作都会反映在之前的浏览器上.

selenium 的 desired_capabilities 如何传递--headless这样的浏览器参数
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
capabilities = DesiredCapabilities.CHROME
capabilities.setdefault("chromeOptions", {"args":["--headless", "--disable-gpu"]})
selenium 使用 crontab等环境启动时提示chromedriver not in PATH

初始化的时候, 传入chromedriver绝对路径

opener = webdriver.Chrome(r"/usr/local/bin/chromedriver", chrome_options=chrome_options)
selenium使用cookies

获得cookies
opener.get_cookies()

写入cookies
opener.add_cookie(cookie) #需要先访问该网站产生cookies后再进行覆写

selenium 等待页面所有异步函数完成

opener.implicitly_wait(30) #30是最长等待时间

selenium 打开新标签页

偏向使用js函数来执行

opener.execute_script("""window.open("http://baidu.com","_blank");""") 
selenium 获得页面的网络请求信息

有些时候页面在你点击后会异步进行请求, 完成一些操作, 这时可能就会生成输出数据的url, 只要抓到这个url就可以跳过token验证等安全监测, 直接获得数据.

script =  "var performance = window.performance || window.mozPerformance || window.msPerformance || window.webkitPerformance || {}; var network = performance.getEntries() || {}; return network;"
performances = opener.execute_script(script)

script里是js代码, 一般用来进行性能检查, 网络请求状况, 使用selenium执行这段js就可以获得所有的请求信息.

おわり.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41342.html

相关文章

  • headless模式下运行selenium

    摘要:而在不久前宣布支持模式而后跟随的新闻再次勾起我无尽的回忆。那么我们就来谈谈在和浏览器不原生支持模式下如何使用来实现模式进行动态数据的抓取。比较常见的例子在中进行转发。下面我们进行测试发现其可以正常的运行。 原文地址: http://52sox.com/python-use-h... 在Python中进行浏览器测试时,一般我们会选择selenium这样的库来简化我们工作量。而有些时候,为...

    MoAir 评论0 收藏0
  • 使用浏览器HEADLESS模式进行自动化测试

    摘要:了解模式指的是不需要用户界面的浏览器,这种浏览器在自动化测试和爬虫领域有着广泛的应用。实践使用浏览器的模式进行自动化测试,你需要先满足以下前提运行环境或者或者最新版已加入万事俱备,废话不多说我们直接上演示代码。 了解HEADLESS模式 HEADLESS BROWSER 指的是不需要用户界面的浏览器,这种浏览器在自动化测试和爬虫领域有着广泛的应用。 例如你想在网页上运行一些测试,从网页...

    lanffy 评论0 收藏0
  • Scrapy+Chromium+代理+selenium

    摘要:通常的解决办法是通过抓包,然后查看信息,接着捕获返回的消息。为了减少因为安装环境所带来的烦恼。代理因为我们已经用替换了。我们需要直接用来处理代理问题。根据上面这段代码,我们也不难猜出解决代理的方法了。 上周说到scrapy的基本入门。这周来写写其中遇到的代理和js渲染的坑。 js渲染 js是爬虫中毕竟麻烦处理的一块。通常的解决办法是通过抓包,然后查看request信息,接着捕获ajax...

    Pocher 评论0 收藏0
  • 使用 headless chrome进行测试

    注:文章聚合了现在 headless chrome 介绍和使用方式 包含了三个部分 chrome 在 mac 上的安装和简单使用(来自官方) 利用 selenium 的 webdrive 驱动 headless chrome(自己添加) 利用Xvfb方式实现伪 headless chrome 概念 Headless模式解决了什么问题: 自动化工具例如 selenium 利用有头浏览器进行测试...

    ephererid 评论0 收藏0
  • selenium+chrome headless完成自动百度八斗平台录入问题(python版本为2

    摘要:对应的的放置目录打开开始登录输入框你的账号你的密码登录确认睡眠秒截图验证码写上你自己的图片地址请输入看到的验证码截图查看步骤写上你自己的图片地址输入任意值继续登录之后跳转跳转开始动态令牌请输入动态 # -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding(utf-8) import os from ...

    Eminjannn 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<