Python 无法单击链接文本,已尝试按链接文本查找元素以及其他一些操作,但无法工作

Python 无法单击链接文本,已尝试按链接文本查找元素以及其他一些操作,但无法工作,python,html,selenium,selenium-webdriver,Python,Html,Selenium,Selenium Webdriver,HTML的屏幕截图 这是html代码的截图,我正与之斗争,我想点击左侧导航中的智能手表,我使用以下代码点击它 driver.implicitly_wait(30) driver.find_element_by_link_text('Smart Watches').click() 但我得到以下错误,我不知道为什么我只是不能找到它在第页 selenium.common.exceptions.NoSuchElementException:消息:无此类 元素:找不到元素:{“方法”:“链接” 文本

HTML的屏幕截图

这是html代码的截图,我正与之斗争,我想点击左侧导航中的智能手表,我使用以下代码点击它

driver.implicitly_wait(30)

driver.find_element_by_link_text('Smart Watches').click()
但我得到以下错误,我不知道为什么我只是不能找到它在第页

selenium.common.exceptions.NoSuchElementException:消息:无此类 元素:找不到元素:{“方法”:“链接” 文本“,”选择器“:“智能手表”}(会话信息: chrome=60.0.3112.113)(驾驶员信息:chromedriver=2.29.461591 (62ebf098771772160f391d75e589dc567915b233),平台=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()
但即使它给了我超时异常

这是我从早上就被困的页面链接 我对编码非常陌生,任何帮助都会很有帮助!!我只是想知道为什么“通过链接查找元素”文本在这里不起作用,我觉得很奇怪


提前感谢

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


驱动程序。通过链接文本(“‘智能手表’”)查找元素。单击()

大多数情况下,在加载页面后,链接可能需要更多的时间才能加载。与其使用隐式等待,不如使用显式等待

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

也可能是链接位于另一个帧内,在这种情况下,您必须切换到此帧

不知道为什么不是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();

你可以这样试试


访问文本:
find_element_by_xpath[“//a[contains(text(),'Smart watchs')]”。单击()

问题是,当您使用
find_element_by_link_text()
时,它必须与链接中包含的文本完全匹配。在HTML图片中,您可以看到“智能手表”,但您没有看到的是
SPAN
正下方但仍在
A
关闭的内部。如果展开它,很可能会看到其他文本,如果要使用
find\u element\u by\u link\u text()
,则必须包含这些文本

另一个选项是
find\u element\u by\u partial\u link\u text()
,它更像
contains()
,而不是
equals()
。根据页面的不同,它可能会找到太多匹配项。你必须试试看它是否有效

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

这是最普遍的,因此最有可能找到不需要的链接,但它可能会工作。它与
find\u element\u by\u partial\u link\u text()几乎相同。

其他选择包括

//a[starts-with(.,'Smart Watches')
//li[@data-filter-facet='smart-watches']/a[contains(.,'Smart Watches')
//li[@data-filter-facet='smart-watches']/a[starts-with(.,'Smart Watches')

。。。等等……

谢谢你的帮助,但我已经尝试过了,甚至没有效果:(谢谢@Gaurang Shah。我也尝试过解释等待,但仍然得到超时异常。@gauravtyagi然后检查它是否在任何框架内是的你是对的你尝试过“通过部分链接文本查找元素”吗。虽然没有回答你的问题。我认为DOM的问题非常感谢!!感谢你的帮助sankalp…但是jeffC,找到了它为什么不工作!!:)这是真的,现在我明白了为什么我不能用链接文本找到它!!。。非常感谢!!
//a[starts-with(.,'Smart Watches')
//li[@data-filter-facet='smart-watches']/a[contains(.,'Smart Watches')
//li[@data-filter-facet='smart-watches']/a[starts-with(.,'Smart Watches')