python - 硒找不到元素
问题描述
大家好,我正在尝试在网站中找到一个元素,但由于某种原因它不允许我这样做。该网页是 Reddit 的登录表单,我尝试输入我的用户名和密码,但是当我列出所有输入时,它只出现在顶部搜索栏。我想这是因为它就像在另一个“选项卡”中一样,它会弹出到前面,但我不知道如何管理它。提前致谢。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
chrome_options = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values.notifications" : 2}
chrome_options.add_experimental_option("prefs",prefs)
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('https://www.reddit.com')
driver.set_window_size(1200, 1300)
login_button = driver.find_element_by_link_text('Log In')
login_button.click()
username = driver.find_element_by_css_selector('input')
username.send_keys("test code to the form")
解决方案
单击登录按钮后,iframe
将打开一个,因此您首先必须切换到该按钮iframe
:
driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@src,'login')]"))
此外,您还有一个问题,username = driver.find_element_by_css_selector('input')
因为input
它不是唯一的 CSS 选择器。
试试这个:
username = driver.find_element_by_css_selector('[id="loginUsername"]')
此外,最好将登录按钮定位如下:
login_button = driver.find_element_by_xpath('//a[contains(@href,"login")]')
最后,插入用户名和密码后,不要忘记从iframe
默认内容切换到
driver.switch_to.default_content()
推荐阅读
- python-sphinx - 使用 Sphinx 的 reSt 渲染不一致
- javascript - 在 Three.js 中获取对象速度
- angular-reactive-forms - Angular 8 反应式表单验证器
- python - 在给定固定窗口大小的情况下计算矩阵中每个值的欧几里得距离
- actionscript-3 - AS3 Event.COMPLETE 传递参数
- arrays - 应用程序快速重启时如何不重置索引
- cmake - 链接 GTest 失败
- javascript - 如何在标点符号之前使用 Regexp 匹配关键字
- c++ - 矢量 Push_Back VS Emplace_Back
- php - 管理员用户名和应用程序的用户名可以相同吗?