Python:Selenium全屏打开网页。
故障分析:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:“xpath”,“selector”:“//*[@id=“userName1”]”}
一、背景
在学习selenium时,我们获取网页上的数据,会发现出现一种情况,元素明明在页面上,但却怎么也定位不上。经过排查,发现执行程序时打开网页状态为窗口化的形式,导致一部分没有显示出来的数据,就没有加载出来,所以我们通过正常元素定位是定位不到的。
我们可以将打开网页的模式改成全屏模式,这样就可以保证元素完全加载出来。
二、问题现象
2.1 代码显示
import time
from selenium.webdriver.common.by import By
from selenium import webdriver
url='https://www.baidu.com/'
driver=webdriver.Chrome()
driver.get(url)
2.2 页面显示
此时页面显示为这样的窗口化,因此在某些页面上,被隐藏部分的内容,这时没有刷新出来,无法通过元素定位。
三、解决方案
3.1 代码展示
这种情况最直白的方式就是将窗口化修改成全屏状态显示,我们可以通过options这个参数进行设置。如下:
import time
import selenium.webdriver.chrome.options
from selenium.webdriver.common.by import By
from selenium import webdriver
#配置Chrome的选项
options=webdriver.ChromeOptions()
#设置Chrome打开方式为全屏打开
options.add_argument('start-maximized')
url='https://www.baidu.com/'
#调用配置参数
driver=webdriver.Chrome(options=options)
driver.get(url)
time.sleep(10)
3.2 页面显示
默认打开就是全屏显示:
四、总结
4.1 推荐
隐藏页面的属性见文章:Selenium隐藏浏览器页面,更改下载路径见文章:Selenium修改默认下载文件路径。
4.2 拓展
浏览器的一些打开方式、属性等都可以通过更改options
参数进行修改。在这里我罗列了一些仅供参考。可根据自己的需要进行帅选,如有疑问可共同讨论。
options.add_argument(‘headless’) # 无头模式
options.add_argument(‘window-size={}x{}’.format(width, height)) # 直接配置大小和set_window_size一样
options.add_argument(‘disable-gpu’) # 禁用GPU加速
options.add_argument(‘proxy-server={}’.format(self.proxy_server)) # 配置代理
options.add_argument(’–no-sandbox’) # 沙盒模式运行
options.add_argument(’–disable-setuid-sandbox’) # 禁用沙盒
options.add_argument(’–disable-dev-shm-usage’) # 大量渲染时候写入/tmp而非/dev/shm
options.add_argument(’–user-data-dir={profile_path}’.format(profile_path)) # 用户数据存入指定文件
options.add_argument('no-default-browser-check) # 不做浏览器默认检查
options.add_argument("–disable-popup-blocking") # 允许弹窗
options.add_argument("–disable-extensions") # 禁用扩展
options.add_argument("–ignore-certificate-errors") # 忽略不信任证书
options.add_argument("–no-first-run") # 初始化时为空白页面
options.add_argument(’–start-maximized’) # 最大化启动
options.add_argument(’–disable-notifications’) # 禁用通知警告
options.add_argument(’–enable-automation’) # 通知(通知用户其浏览器正由自动化测试控制)
options.add_argument(’–disable-xss-auditor’) # 禁止xss防护
options.add_argument(’–disable-web-security’) # 关闭安全策略
options.add_argument(’–allow-running-insecure-content’) # 允许运行不安全的内容
options.add_argument(’–disable-webgl’) # 禁用webgl
options.add_argument(’–homedir={}’) # 指定主目录存放位置
options.add_argument(’–disk-cache-dir={临时文件目录}’) # 指定临时文件目录
options.add_argument(‘disable-cache’) # 禁用缓存
options.add_argument(‘excludeSwitches’, [‘enable-automation’]) # 开发者模式