我是该网站的新手。我正在尝试选择/点击http://autotask.net上的元素。我试图使用以下方法找到元素:
driver.find_element_by_css_selector('#HREF_btnPrint> img:nth-child(1)') driver.find_element_by_xpath( 'browser.find_element_by_xpath('/ HTML /体/形式[1] / DIV [2] / DIV [1] / UL /锂[2] / A / IMG')
...但它在标题中给了我例外。
我可以在登录页面上找到正常的元素(即'用户名''密码'字段),但是一旦我登录,selenium就无法在页面上找到任何元素。
我现在只学习/编写python几周了,我对Java一无所知。如果您需要更多信息,请告诉我 - 谢谢。
答案 0 :(得分:0)
我不确定python语法,所以我将使用Java代替。我认为有两种可能的情况,首先你的驱动程序在页面加载时调查DOM结构。另一个是Web驱动程序没有指向DOM的根目录。我通常使用wait方法等待页面加载完毕,并在查找某些元素之前切换到默认内容。
首先,我通过构造函数传递WebDriver,Element id和Element name。然后我有waitUntilReady()
实现逻辑来检查特定超时内元素的存在。
public void waitUntilReady() {
WebDriverWait waiter = new WebDriverWait(getWebDriver(), 30);
waiter.withMessage("\"" + getElementName() + "\" is not ready in 30 seconds")
.until(new Predicate<WebDriver>() {
@Override
public boolean apply(WebDriver input) {
/* isReady() returns true if all elements
* that you need to test are available.
* Note that if you have javascript, you
* should have some hidden field to tell
* you that the whole page has loaded. */
return isReady();
}
});
}
以及在找到元素
之前切换到默认内容WebElement getWebElement() {
WebElement webElement;
try {
getWebDriver().switchTo().defaultContent();
webElement = getWebDriver().findElement(By.id(elementId));
} catch (NoSuchElementException ex) {
getLogger().log(Level.SEVERE, "Element id '" + elementId + "' does not exist");
throw ex;
}
return webElement;
}
如果它不起作用,你可以使用<body id="container">
,然后使用driver.findElementById(“container”)。findElementById(“你的目标元素”)