首页 > 解决方案 > 硒找不到元素

问题描述

大家好,我正在尝试在网站中找到一个元素,但由于某种原因它不允许我这样做。该网页是 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")

标签: pythonseleniumselenium-webdriverwebweb-scraping

解决方案


单击登录按钮后,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()

推荐阅读