selenium xpath 和 人机检测

大家是不是也和我一样 在遇到一些有反爬和JS比较复杂的网站就头疼 总想着用简单的selenium去解决呢、

可就算我们用selenium自动爬取也会呗发现并出现人机验证
那他们是怎么分辨我们的爬取活动呢

在这里插入图片描述
就是上边这个东西把我们暴露了
在这里插入图片描述

还有就是 谷歌控制台输入window.navigator.webdriver
如果显示ture 则表示 是自动化脚本在运行谷歌浏览器 会被检测到 可能会被网站做人机处理
如果显示flase 或者 undefined 就代表 没有被检测到时自动脚本运行

# 就是上边这个东西把我们暴露了
# 我也来分享下我在遇到这种问题的一个跳过办法吧

from selenium import webdriver
from lxml import etree
#这里我把他直接写成一个函数了  直接调用赋值就好了
def get_options():
    options = webdriver.ChromeOptions()
    # 设置参数
    options.add_experimental_option("excludeSwitches", ["enable-automation"]) 
    options.add_experimental_option('useAutomationExtension', False)
    # 带入参数和插件地址 并执行Chrome
    driver = webdriver.Chrome(options=options, executable_path='D:/python37/chromedriver.exe')
    # 方法可以用来执行Chrome开发这个工具命令。
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": """
        # 这里的操作大概就是把控制台中的window.navigator.webdriver =undefined  赋值   因为人机操作会认为是Ture
        Object.defineProperty(navigator, 'webdriver', {
          get: () => undefined
        })
      """
    })
    return driver
# 使用谷歌插件打开你想要的进入的网站
brower = get_options()
browser.get('https://www.baidu.com')
# 查看网页的数据源码  
browser.page_source
for x in browser.find_elements_by_xpath('//div/a'):
	# 获取xpath属性 //div/a 下的文本
	x.get_attribute('textContent'))
	# 获取xpath属性 //div/a 下的@href内容
	x.get_attribute('href'))
# 或者直接用lxml的xpath

'''
resp = browser.get('https://www.baidu.com')
html = etree.HTML(resp)
cont = html.xpath('//div/a/text()')
href = html.xpath('//div/a/@href')
'''

用的时候直接调用即可

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值