ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python+selenium无头模式访问网站被禁止访问导致元素无法定位获取的问题定位过程以及解决方案

2022-08-02 18:33:46  阅读:257  来源: 互联网

标签:脚本 定位 浏览器 python driver 访问 无头 options chrome


一、需求描述

  由于selenium自动化脚本被设置了定时任务每天会定时执行,脚本是有头模式的浏览器,即执行脚本时会打开浏览器,并且脚本是实现的是自动截图的一些功能,这就很不方便,比如在做其他事情,突然打开浏览器来截图会打断当前的事情并且可能会截到非访问页面的内容,这样自动发出去会产生不好的影响,因此为了避免以上两个问题,考虑使用无头模式,即执行脚本不打开浏览器,在后台实现一些操作,这样就方便多了。

 

二、实现过程

1、首先定义初始化了无头浏览器,代码如下

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import pyautogui
import time
# 无头模式初始化
def noheadmodel():
    webdriver_path = '/Users/xxx/Documents/python/pack/chromedriver/chromedriver'
    page_url = 'https://www.tapd.cn/xxx'
    chrome_options = Options()
    # 设置为无头模式
    chrome_options.add_argument('--headless')
    width,height = pyautogui.size()
    chrome_options.add_argument('--window-size=%sx%s' % (width,height))
    driver = webdriver.Chrome(executable_path=webdriver_path,chrome_options=chrome_options)
    driver.get(page_url)
    time.sleep(1)
    driver.get_screenshot_as_file('test.png')
    return driver,page_url

2、调用初始化函数使用无头模式执行脚本,代码如下

 

 

3、执行脚本

  执行脚本出现如下图报错,并且没有成功截图,报错如下图

 

4、通过调试代码发现是执行js时报错了,如下

 

page_height = self.driver.execute_script('return ' + self.js + 'Height')

 

三、报错原因查找

  上述脚本执行失败后开始查找猜想各种报错原因

1、猜想一

  难道无头模式浏览器没有scrollHeight参数?

  验证:

    (1)去网上首先百度是不是有无头模式浏览器没有scrollHeight参数这个说法,发现没有这样的文章。

  (2)使用百度网页执行js脚本发现可以正常获取scrollHeight没有报错。

  因此猜想一可以排除。

2、猜想二

  是不是中间没有设置等待时间,导致页面还没加载出来,所以无法通过scrollHeight获取页面高度?

  验证:

  (1)在初始化浏览器的时候又设置了等待时间,即time.sleep(1),验证问题没解决。

  因此猜想二也排除。 

3、猜想三

  难道是访问被禁止,页面没打开?

  验证:

  (1)在无头模式下执行脚本,打开浏览器的时候使用函数driver.get_screenshot_as_file()保存截图,发现截到的图确实出现访问被拒绝的提示,页面没法开,如下图:


 

问题终于找到了,就是被拒绝访问导致页面没打开无法获取网页高度,接下来又是艰难的解决无头浏览器被觉得访问的问题。

三、问题解决过程

1、在网上百度很多都说解决方案是加如下参数:

chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])

或者加如下内容:

 

都试了一下,加了也没啥用。

2、终极解决方案

最后看有网页写到加入如下一行内容即可解决该问题,试了之后确实如此,网页可以正常访问,也没有出现报错了,成功截图并发送消息。

chrome_options.add_argument(f'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36')

 

标签:脚本,定位,浏览器,python,driver,访问,无头,options,chrome
来源: https://www.cnblogs.com/lxmtx/p/16544781.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有