如何隐藏Selenium特征实现自动化网页采集

Selenium是一个流行的自动化网页测试工具,可以通过模拟用户在Chrome浏览器中的操作来完成网站的测试。然而,有些网站会检测浏览器是否由Selenium驱动,如果是,就会返回错误的结果或拒绝访问。为了避免这种情况,我们需要隐藏Selenium的特征,让网站认为我们是正常的用户。

以下是三种常见的隐藏Selenium特征的方法:

1、修改navigator.webdriver标志:navigator.webdriver是一个浏览器提供的属性,用于表示浏览器是否由webdriver控制。默认情况下,如果浏览器由Selenium驱动,这个标志的值为true,否则为false。我们可以通过execute_cdp_cmd命令来执行Google Chrome DevTools命令,从而修改这个标志的值为false或者undefined,以隐藏Selenium的特征。

2、改变user-agent:user-agent是一个浏览器发送给网站的字符串,用于表示浏览器的类型和版本。有些网站会根据user-agent来判断用户的设备和操作系统,如果发现user-agent不符合正常的范围,就会怀疑是Selenium驱动的浏览器。我们可以通过execute_cdp_cmd命令来设置Network.setUserAgentOverride参数,从而改变user-agent为任意我们想要的值,以隐藏Selenium的特征。

3、排除或关闭一些Selenium相关的开关:enable-automation和useAutomationExtension是两个常见的Selenium相关开关,它们会影响浏览器的行为和外观,比如在浏览器窗口上显示“Chrome正在受到自动软件的控制”的提示。我们可以通过Chrome选项来添加或删除这些开关,从而让浏览器看起来更像正常的浏览器,以隐藏Selenium的特征。

综上所述,隐藏Selenium特征是实现自动化网页测试的关键。通过以上三种方法,我们可以让浏览器看起来更像正常的用户,避免被网站检测到并拒绝访问。综合上面的几种selenium特征隐藏方式,以采集大众点评的评论为案例,结合实际爬虫采集过程中需要使用的代理IP池,提供如下demo:

  1.   from selenium import webdriver

  2.   from selenium.webdriver.common.proxy import Proxy, ProxyType

  3.   # 亿牛云爬虫加强版代理IP 地址、端口号、用户名和密码

  4.   proxy_address = 'www.16yun.cn'

  5.   proxy_port = '3100'

  6.   proxy_username = '16YUN'

  7.   proxy_password = '16IP'

  8.   # 设置Chrome选项,包括隐藏Selenium特征、设置代理IP和排除或关闭一些Selenium相关开关

  9.   options = webdriver.ChromeOptions()

  10.   options.add_argument('--disable-blink-features=AutomationControlled')

  11.   options.add_argument('--disable-extensions')

  12.   options.add_argument('--disable-gpu')

  13.   options.add_argument('--disable-infobars')

  14.   options.add_argument('--disable-notifications')

  15.   options.add_argument('--disable-popup-blocking')

  16.   options.add_argument('--disable-web-security')

  17.   options.add_argument('--ignore-certificate-errors')

  18.   options.add_argument('--no-sandbox')

  19.   options.add_argument('--start-maximized')

  20.   options.add_argument('--user-data-dir=/dev/null')

  21.   options.add_argument('--proxy-server={}'.format(proxy_address + ':' + proxy_port))

  22.   options.add_argument('--proxy-auth={}:{}'.format(proxy_username, proxy_password))

  23.   options.add_experimental_option('excludeSwitches', ['enable-automation', 'useAutomationExtension'])

  24.   # 初始化Chrome浏览器,并使用上述选项

  25.   driver = webdriver.Chrome(options=options)

  26.   # 隐藏navigator.webdriver标志,将其值修改为false或undefined

  27.   driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {

  28.    'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'

  29.   })

  30.   # 设置user-agent,改变user-agent的值

  31.   user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"

  32.   driver.execute_cdp_cmd("Network.setUserAgentOverride", {"userAgent": user_agent})

  33.   # 访问大众点评中商品的评论页面

  34.   url = 'https://www.dianping.com/shop/1234567/review_all'

  35.   driver.get(url)

  36.   # 在此处添加其他代码来执行您想要的任务

此代码将使用Chrome浏览器,并在启动浏览器时使用选项隐藏Selenium特征、设置用户名和密码方式的代理IP和排除或关闭一些Selenium相关开关。然后,使用execute_cdp_cmd命令来执行Google Chrome DevTools协议中的命令,将navigator.webdriver标志的值修改为false或undefined。使用execute_cdp_cmd命令来设置Network.setUserAgentOverride参数,将user-agent更改为指定的user-agent字符串。最后,访问大众点评中商品的评论页面,并在此处添加其他代码来执行您想要的任务。

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Selenium 自动化爬取淘宝商品详情数据可以分为以下步骤: 1. 安装 Selenium 和浏览器驱动:Selenium 是 Python 中用于自动化 Web 浏览器的库,需要安装;同时需要下载对应浏览器的驱动程序,如 ChromeDriver。 2. 打开浏览器并访问淘宝网站:使用 Selenium 打开指定的浏览器并访问淘宝网站。 3. 搜索关键字并获取搜索结果:在搜索框中输入关键字并点击搜索按钮,等待搜索结果加载出来,使用 Selenium 获取搜索结果页面的 HTML 代码。 4. 解析搜索结果页面:使用 BeautifulSoup 解析搜索结果页面,获取每个商品的链接。 5. 进入商品详情页面并获取数据:遍历每个商品的链接,使用 Selenium 进入商品详情页面并获取需要的数据,如商品标题、价格、评论数、销量等。 6. 存储数据:将获取到的数据存储到数据库或文件中。 下面是一个示例代码: ```python from selenium import webdriver from bs4 import BeautifulSoup import time # 设置浏览器驱动路径 driver_path = './chromedriver.exe' # 创建浏览器对象 browser = webdriver.Chrome(driver_path) # 设置搜索关键字 keyword = '手机' # 访问淘宝网站 browser.get('https://www.taobao.com/') # 等待页面加载完成 time.sleep(3) # 找到搜索框并输入关键字 browser.find_element_by_name('q').send_keys(keyword) # 点击搜索按钮 browser.find_element_by_class_name('btn-search').click() # 等待搜索结果加载完成 time.sleep(5) # 获取搜索结果页面的 HTML 代码 html = browser.page_source # 使用 BeautifulSoup 解析搜索结果页面 soup = BeautifulSoup(html, 'html.parser') # 获取所有商品的链接 links = [] for item in soup.find_all('a', class_='J_ClickStat'): link = item.get('href') if link.startswith('https://'): links.append(link) # 遍历每个商品的链接并获取数据 for link in links: # 进入商品详情页面 browser.get(link) # 等待页面加载完成 time.sleep(3) # 获取商品标题 title = browser.find_element_by_xpath('//h3[@class="tb-main-title"]/text()') # 获取商品价格 price = browser.find_element_by_xpath('//div[@class="tb-property-cont"]/div[@class="tb-detail-price"]/span[@class="tb-price"]/text()') # 获取商品评论数 comment_count = browser.find_element_by_xpath('//div[@class="tb-rate-counter"]/span[@class="tm-count"]/text()') # 获取商品销量 sales_volume = browser.find_element_by_xpath('//div[@class="tb-sales-counter"]/span[@class="tm-count"]/text()') # 打印商品信息 print('标题:', title) print('价格:', price) print('评论数:', comment_count) print('销量:', sales_volume) # 关闭浏览器 browser.quit() ``` 需要注意的是,使用自动化爬取数据容易被网站识别为机器行为,可以添加一些随机等待时间、请求头伪装等方式来降低被识别的概率。同时,爬取数据时也需要遵守网站的爬虫规则,如不过度频繁访问、不采集敏感信息等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值