项目场景:
1、抓取数据时,响应状态码为412,即状态码412含义为:Precondition Failed,服务器在验证在请求的头字段中给出先决条件时,没能满足其中的一个或多个。这个状态码允许客户端在获取资源时在请求的元信息(请求头字段数据)中设置先决条件。
2、加请求头所有参数,依旧返回412
问题描述
遇到的问题:
1、pyppeteer、selenium在无头模式下,返回无数据状态
2、抓取数据,返回错误数据状态
原因分析:
问题的分析:网站对模拟浏览器抓取有限制
无头模式下,需绕过检测,即程序中加入所需参数
解决方案:
解决方案:
1、
selenium模拟浏览器抓取:
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_argument('--disable-blink-features=AutomationControlled') # 无头模式,防检测
2、
pyppeteer模拟浏览器抓取:
await launch(# {"executablePath": browser_path, "ignoreHTTPSErrors": True, "headless": True, "dumpio": True,#"args": [# "--start-maximized",# "--no-sandbox",# # '--disable-blink-features=AutomationControlled' # 新版谷歌浏览器,绕过检测参数配置#]}
option = webdriver.ChromeOptions()option.add_argument('--headless')option.add_argument('--disable-blink-features=AutomationControlled') # 无头模式,防检测option.add_argument('window-size=1920x1080')option.add_argument('log-level=3')option.add_argument("--user-agent=*****")option.add_argument("--disable-dev-shm-usage")option.add_argument("--no-sandbox")option.add_argument("lang=zh_CN.UTF-8")option.add_argument('--disable-gpu')option.add_argument('--incognito')option.add_argument("--window-size=1920,1050") # 专门应对无头浏览器中不能最大化屏幕的方案option.add_experimental_option('excludeSwitches', ['enable-automation'])option.add_experimental_option('useAutomationExtension', False)driver = webdriver.Chrome(options=option) # 把参数配置设置到浏览器中driver.get(url)time.sleep(1)pageSource = driver.page_sourceprint(pageSource)
#browser = await launch(# {"executablePath": browser_path, "ignoreHTTPSErrors": True, "headless": True, "dumpio": True,#"args": [# "--start-maximized",# "--no-sandbox",# # '--disable-blink-features=AutomationControlled' # 新版谷歌浏览器,绕过检测参数配置#]}#)#page = await browser.newPage()#try:# await page.setUserAgent(# "*****")# await page.goto(url)# await page.waitFor(2000)# page_text = await page.content()# await browser.close()# print(page_text)