无法点击链接文字,尝试过Find_ELEMENT_BY_LINK_TEXT和其他一些事情,但它无法正常工作

时间:2017-09-22 10:36:44

标签: python html selenium selenium-webdriver

HTML的屏幕截图 enter image description here

以下是html代码的 屏幕截图 ,我正在努力,我想点击左侧的智能手表我正在使用以下代码点击它

driver.implicitly_wait(30)

driver.find_element_by_link_text('Smart Watches').click()

但我收到以下错误,我无能为力,为什么我无法在页面上找到它

  

selenium.common.exceptions.NoSuchElementException:消息:没有这样的   element:无法定位元素:{“method”:“link   text“,”selector“:”Smart Watches“}(会话信息:   chrome = 60.0.3112.113)(司机信息:chromedriver = 2.29.461591   (62ebf098771772160f391d75e589dc567915b233),platform = Windows NT   6.2.9200 x86_64)

我还尝试了显式代码和预期条件如下 - :

wait = WebDriverWait(driver, 20)
link = wait.until(expected_conditions.presence_of_element_located((By.LINK_TEXT,'"Smart Watches"')))
link.click()

但即使它给我超时例外

这是我从早上起就被卡住的页面的链接 的 https://www.kogan.com/au/shop/phones/  我对编码很新,任何帮助都会有所帮助!!我只是想知道为什么find_element_by_link_text不能在这里工作,这对我来说很奇怪!!

提前致谢

5 个答案:

答案 0 :(得分:1)

问题在于,当您使用stdio.h时,它必须与链接中包含的文本完全匹配。在您的HTML图片中,您可以看到“智能手表”,但您看不到的是find_element_by_link_text()正好在下方,但仍然在SPAN内部已关闭。最有可能的是,如果您要展开它,您将看到在使用A时必须包含的其他文字。

另一个选项是find_element_by_link_text(),更像find_element_by_partial_link_text()而不是contains()。根据页面的不同,可能会发现太多匹配项。您必须尝试查看它是否有效。

另一种选择是使用XPath。根据您的需要,有很多不同的方法可以为此创建XPath。

这是最常见的,因此最有可能找到不需要的链接,但它可能会起作用。它与equals()

几乎相同
find_element_by_partial_link_text()

其他选项包括

//a[contains(.,'Smart Watches')

......等等......

答案 1 :(得分:0)

不知道为什么它不是wotks而是部分链接文本有效。请参阅我的java代码:

WebDriver driver=new FirefoxDriver();
driver.get("https://www.kogan.com/au/shop/phones/");

WebElement watch=driver.findElement(By.partialLinkText("Smart Watch"));
WebDriverWait waitElement=new WebDriverWait(driver, 30);
waitElement.until(ExpectedConditions.elementToBeClickable(watch));
watch.click();

答案 2 :(得分:0)

你可以这样试试......

访问文字:find_element_by_xpath["//a[contains(text(), 'Smart Watches')]"].click()

答案 3 :(得分:-1)

您需要添加双引号,因为它位于html代码中:

driver.find_element_by_link_text('"Smart Watches"').click()

答案 4 :(得分:-1)

大多数情况下,链接在页面加载后需要花费更多时间才能加载。而不是使用隐式等待使用显式等待。

wait = WebDriverWait(driver, 30)
link = wait.until(expected_conditions.presence_of_element_located((By.LINK_TEXT,"Smart Watches")))
link.click()

也可能是链接在另一个框架内的情况,在这种情况下,您将不得不切换到此框架。