1、无头浏览器(headless browser)是什么
无头浏览器是指可以在图形界面情况下运行的,可以模拟多种浏览器的运行框架。研发可以通过编程来控制该框架执行各种任务,模拟真实的浏览器操作和各种任务,例如登录、js解析、ajax动态生成、获取cookie等。
2、无头浏览器适合的场景
无头浏览器的框架需要真实运行浏览器,因此系统开销大,采集运行速度慢,相对与一般的爬虫程序,其运行环境要求搭建的工具和库较多,因此如果目标网站反爬不是很难,可以直接通过简单的http请求进行采集,不适合使用无头浏览器方案。
当目标网站有多种验证机制,例如需要验证登录、ajax动生成、js反爬策略,如果研发不能进行网站行为分析的情况下,建议使用无头浏览器伪装正常用户,同时配合使用爬虫代理加强版进行数据采集。
3、无头浏览器框架推荐
无头浏览器有很多,我们推荐如下:
selenium+chrome+chrome driver+爬虫代理加强版
4、下面示例包括各种安装说明及代码
(1)下载chrome对应版本的chrome deriver
下载chrome https://www.google.com/chrome/
下载对应版本 driver https://chromedriver.chromium.org/downloads
注意chrome的版本和deriver的版本一定需要一致,可以查看具体的帮助说明,如果不一致,即使程序能够运行,也会出现爬虫代理认证信息失败,需要弹窗要求手动输入认证信息的问题。
(2)设置开发者模式
如果浏览器正常运行下,navigator.webdriver的值应该是undefined或者false,如果为true目标网站能检测到selenium,设置为开发者模式,可以防止目标网站识别

from selenium.webdriver import ChromeOptions
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])#开启实验性功能
browser=webdriver.Chrome(options=option)# 修改get方法
script = '''
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
'''
browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": script})

(3)配合使用爬虫代理加强版
通过无头浏览器模拟用户操作,同时结合爬虫代理加强版实现IP地址自动切换,可以真实的实现用户终端请求,获取相应的数据,下面是获取cookie的代码:

    import osimport timeimport zipfilefrom selenium import webdriverfrom selenium.common.exceptions import TimeoutExceptionfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.ui import WebDriverWaitclass GenCookies(object):# 随机useragentUSER_AGENT = open('useragents.txt').readlines()# 代理服务器(产品官网 www.16yun.cn)PROXY_HOST = 't.16yun.cn'  #  proxy or hostPROXY_PORT = 31111  # portPROXY_USER = 'USERNAME'  # usernamePROXY_PASS = 'PASSWORD'  # password@classmethoddef get_chromedriver(cls, use_proxy=False, user_agent=None):manifest_json = """{"version": "1.0.0","manifest_version": 2,"name": "Chrome Proxy","permissions": ["proxy","tabs","unlimitedStorage","storage","<all_urls>","webRequest","webRequestBlocking"],"background": {"scripts": ["background.js"]},"minimum_chrome_version":"22.0.0"}"""background_js = """var config = {mode: "fixed_servers",rules: {singleProxy: {scheme: "http",host: "%s",port: parseInt(%s)},bypassList: ["localhost"]}};chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});function callbackFn(details) {return {authCredentials: {username: "%s",password: "%s"}};}chrome.webRequest.onAuthRequired.addListener(callbackFn,{urls: ["<all_urls>"]},['blocking']);""" % (cls.PROXY_HOST, cls.PROXY_PORT, cls.PROXY_USER, cls.PROXY_PASS)path = os.path.dirname(os.path.abspath(__file__))chrome_options = webdriver.ChromeOptions()# 关闭webdriver的一些标志# chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])        if use_proxy:pluginfile = 'proxy_auth_plugin.zip'with zipfile.ZipFile(pluginfile, 'w') as zp:zp.writestr("manifest.json", manifest_json)zp.writestr("background.js", background_js)chrome_options.add_extension(pluginfile)if user_agent:chrome_options.add_argument('--user-agent=%s' % user_agent)driver = webdriver.Chrome(os.path.join(path, 'chromedriver'),chrome_options=chrome_options)# 修改webdriver get属性# script = '''# Object.defineProperty(navigator, 'webdriver', {# get: () => undefined# })# '''# driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": script})return driverdef __init__(self, username, password):        # 登录example网站self.url = 'https://passport.test.cn/signin/login?entry=example&r=https://m.test.cn/'self.browser = self.get_chromedriver(use_proxy=True, user_agent=self.USER_AGENT)self.wait = WebDriverWait(self.browser, 20)self.username = usernameself.password = passworddef open(self):"""打开网页输入用户名密码并点击:return: None"""self.browser.delete_all_cookies()self.browser.get(self.url)username = self.wait.until(EC.presence_of_element_located((By.ID, 'loginName')))password = self.wait.until(EC.presence_of_element_located((By.ID, 'loginPassword')))submit = self.wait.until(EC.element_to_be_clickable((By.ID, 'loginAction')))username.send_keys(self.username)password.send_keys(self.password)time.sleep(1)submit.click()def password_error(self):"""判断是否密码错误:return:"""try:return WebDriverWait(self.browser, 5).until(EC.text_to_be_present_in_element((By.ID, 'errorMsg'), '用户名或密码错误'))except TimeoutException:return Falsedef get_cookies(self):"""获取Cookies:return:"""return self.browser.get_cookies()def main(self):"""入口:return:"""self.open()if self.password_error():return {'status': 2,'content': '用户名或密码错误'}            cookies = self.get_cookies()return {'status': 1,'content': cookies}if __name__ == '__main__':result = GenCookies(username='180000000',password='16yun',).main()print(result)

无头浏览器Selenium的使用要点相关推荐

  1. selenium无头浏览器_无头Selenium浏览器

    selenium无头浏览器 重要要点 无头浏览器无需用户界面即可运行. 不再支持PhantomJS. JBrowser驱动程序是Java 8的低开销选项. 如果需要Java 11支持,所有当前的Jav ...

  2. 基于Python, Selenium, Phantomjs无头浏览器访问页面

    引言: 在自动化测试以及爬虫领域,无头浏览器的应用场景非常广泛,本文将梳理其中的若干概念和思路,并基于代码示例其中的若干使用技巧. 1. 无头浏览器 通常大家在在打开网页的工具就是浏览器,通过界面上输 ...

  3. python爬虫之selenium,谷歌无头浏览器

    python爬虫之selenium和PhantomJS 主要的内容 lenium hantomjs 无头浏览器 的懒加载 一 什么是selenium? 介绍 它是python中的一个第三方库,对外提供 ...

  4. python——selenium框架实现无头浏览器访问 + 规避检测配置

    备注: 有的时候,我们希望,selenium访问的时候,不要出现浏览器, 那么就需要进行配置.具体配置看代码. 运行代码 # !/user/bin/env python # -*- coding: u ...

  5. python 无头浏览器xhr 文件_Python对Selenium调用浏览器进行封装包括启用无头浏览器,及对应的浏览器配置文件...

    """ 获取浏览器 打开本地浏览器 打开远程浏览器 关闭浏览器 打开网址 最大化 最小化 标题 url 刷新 python对selenium封装浏览器调用 ------b ...

  6. python 无头浏览器_Python对Selenium调用浏览器进行封装包括启用无头浏览器,及对应的浏览器配置文件...

    """ 获取浏览器 打开本地浏览器 打开远程浏览器 关闭浏览器 打开网址 最大化 最小化 标题 url 刷新 Python对Selenium封装浏览器调用 ------b ...

  7. [转载] 基于Python, Selenium, Phantomjs无头浏览器访问页面

    参考链接: Selenium Python技巧 引言: 在自动化测试以及爬虫领域,无头浏览器的应用场景非常广泛,本文将梳理其中的若干概念和思路,并基于代码示例其中的若干使用技巧. 1. 无头浏览器 通 ...

  8. selenium防爬无头浏览器和模拟手机浏览器

    在edge浏览器中使用webdriver时控制台中window.navigator.webdriver 元素会显示True,正常情况下来说应该是关掉的,所以我们用js来屏蔽掉这个元素 from sel ...

  9. 干货!一文搞定无头浏览器的概念以及在selenium中的应用

    无头浏览器 无头浏览器,即 Headless Browser,是一种没有界面的浏览器.它拥有完整的浏览器内核,包括 JavaScript 解析引擎.渲染引擎等.与普通浏览器最大的不同是,无头浏览器执行 ...

  10. 记录第一次使用selenium 调用Chrome无头浏览器和options一些参数解析整合

    记录第一次使用selenium 调用Chrome无头浏览器和options一些参数解析整合 1.selenium使用 from selenium import webdriver from selen ...

最新文章

  1. linux搭建markdown服务,Markdown新手快速入门基础教程及Ubuntu下的安装
  2. Redis三种特殊数据类型
  3. 四则运算 结对项目
  4. Mac 打开jupyter
  5. BZOJ 4518: [Sdoi2016]征途 [斜率优化DP]
  6. 长春大学计算机学院招生简章,长春大学招生简章
  7. [ASP.NET MVC]让Html.RenderAction支持Lamda表达式
  8. aes解密算法 java_AES算法实现Java和JS互通加解密
  9. 使用Reaver破解开启了WPS功能的wifi密码(wpa/wpa2)
  10. 笨方法学习python
  11. 嵌入式单片机学习入门到大牛
  12. 后台批量刷新金蝶K3物料名称操作步骤
  13. 2009福布斯中国上市公司最佳CEO榜
  14. vue+elementUI 表格下载为excel
  15. Altium Designer之多层板设置
  16. magma测试与安装,使用(含docker配置)
  17. 发票查验API可以查验的发票类型有哪些?
  18. java中金额元转万元工具类
  19. 物联网新零售项目 订单支付与出货控制
  20. [Serializable]在C#中的作用-NET 中的对象序列化

热门文章

  1. XMPP即时通讯协议使用(十)——好友关系状态
  2. 基于OneNET物联网平台和GPRS网络继电器SAC07GSA的共享经济方案简介
  3. cassandra数据库可视化工具
  4. 新浪微博从 Kafka 到 Pulsar 的演变
  5. 【C语言】 C语言图形编程 俄罗斯方块 课程设计
  6. 用html敲出字母,摩斯密码表 怎么用手敲出摩斯密码(我爱你)
  7. python下载互联网上的的图片
  8. Gradle下载的地址
  9. ad中装配图如何导出_AD的PDF文件如何进行输出,你都掌握了?
  10. Swift4-有妖气漫画精仿框架部分