selenium动手

举报
黄生 发表于 2022/10/16 14:33:14 2022/10/16
【摘要】 Firefox DevTools,2017年Firebug插件的功能全部集成到了前者。python -m pydoc -p8888 浏览器查看API文档 --我也不理解为什么6666就不安全了?当然,在IDE里的提示查看起来更方便在selenium启动的chrome浏览器里:console.log(navigator) # or window.navigator.webdriver借助于we...

Firefox DevTools,2017年Firebug插件的功能全部集成到了前者。
python -m pydoc -p8888 浏览器查看API文档 --我也不理解为什么6666就不安全了?
当然,在IDE里的提示查看起来更方便

在selenium启动的chrome浏览器里:

console.log(navigator) # or window.navigator.webdriver

image.png

借助于webdriver的execute_cdp_cmd方法,可以执行Chrome Devtools Protocol command,这个命令可以抢占先机,在页面上的js执行之前执行。从而将上图中的webdriver变成undefined.

我们打开了某个页面,以为初始页面加载完成就可以操作了,结果出现元素找不到的情况。很有可能该页面向服务器发出来了ajax请求,而该请求并没有完成,元素还未正常显示。

python的time模块的sleep是帮助我们观察或调试脚本运行,不应依赖它做等待。

driver.implicitly_wait(10)简直太好用了,并且简单。
这对于某些因为环境原因导致的元素偶尔找不到的问题非常好用。但是也要看它的缺点:

  1. 对于检测某些内容不存在的情况呢?完啦巴比叩啦
  2. 要等待整个页面加载完成(浏览器转圈停止),如果包含很多JS和图片呢?
  3. 干扰显性等待。混合使用显性等待和隐性等待会导致意想不到的后果(官方说法)。

当然建议是用显性等待,不过麻烦呀。

driver=webdriver.Chrome()

简单粗暴的在PATH里查找chromedriver.exe并运行起来,如果没有的话就报错

selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://chromedriver.chromium.org/home

看版本:pip show selenium

点击页面上的超链接打开了一个新窗口或新标签,并且新窗口或新标签处于当前可操作的页面。人是知道的,看到的;但是webdriver并不知道哪个窗口处于当前可操作的状态。

使用到的方法:

webdriver.ChromeOptions()
options.add_experimental_option()
webdriver.Chrome()
driver.execute_cdp_cmd()
driver.implicitly_wait()
driver.maximize_window()
driver.get()
driver.current_window_handle
driver.find_element()
By.CSS_SELECTOR
title.is_displayed
title.click
random.randint()
driver.window_handles
driver.switch_to.window()
driver.close()
driver.quit()
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。