我是Selenium的新手。我正在尝试编写一个将登录到特定表单的 Python 脚本。该表格位于 http://www.tvta.ca/securedContent
我正在运行的代码是:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://tvta.ca/securedContent/")
elem = driver.find_element_by_name("txtUserName")
elem.clear()
elem.send_keys("<<my email>>")
我收到一个错误,说:
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [name="txtUserName"]
我不确定我在这里错过了什么?我已经检查了网页的来源,登录字段肯定被命名为 txt用户名。
您需要切换到框架以在文本框中写入文本,请尝试检查一次语法,因为我在 Python 中的表现较少
framLogin= driver.find_element_by_id("membeeLoginIF")
driver.switch_to.frame(framLogin)
EmailTxt = driver.find_element_by_name("txtUserName")
EmailTxt.send_Keys("Test@gmail.com")
在爪哇中相同
WebElement framLogin= driver.findElement(By.id("membeeLoginIF"));
driver.switchTo().frame(framLogin);
WebElement EmailTxt = driver.findElement(By.name("txtUserName"));
EmailTxt.sendKeys("Test@gmail.com");
该网站需要启用第三方cookie;没有它们,登录表单将不会加载。您可能以这种方式配置了浏览器,但webdriver.Firefox
的默认值没有。
要查看Selenium实际看到的内容,请转储driver.page_source
和/或使用driver.save_screenshot(...)
截图。
所需的元素位于<iframe>
内。因此,根据最佳实践,您必须:
-
诱导WebDriver等待所需的帧可用并切换到它。
-
诱导WebDriver等待所需的元素可单击,您可以使用以下定位器策略:
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"membeeLoginIF"))) WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.textboxWaterMark#txtUserName"))).send_keys("Jeff")
-
您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC