我尝试点击文本链接,但不起作用:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://my.gumtree.com/login")
driver.find_element_by_name("username").send_keys(email)
driver.find_element_by_id("existingUser").click()
driver.find_element_by_id("fld-password").send_keys(password)
driver.find_element_by_xpath("//*[contains(text(), 'Continue')]").click() # works
driver.get("https://my.gumtree.com/postad")
driver.find_elements_by_xpath("//*[text()='For Sale']")[-1].click() # this now works, thanks
# driver.find_element_by_xpath("//*[contains(@span,'Appliances']").click() # this worked but I need the next line instead
driver.find_element_by_xpath("//span[text()[normalize-space()='Phones, Mobile Phones & Telecoms']]").click() # this does not work
driver.find_element_by_xpath("//span[text()[normalize-space()='Phones, Mobile Phones & Telecoms']]").click() # this does not work either
driver.find_element_by_xpath("//span[text()[normalize-space()='Mobile Phones']]").click()
driver.find_element_by_xpath("//span[text()[normalize-space()='Other']]").click()
超文本:
<li class="border-b is-parent" data-category-name="Appliances" data-category-url="kitchen-appliances" data-category-id="2485" data-category-children="true">
<span class="category-name">
<span class="category-list-control is-parent">
</span>
Appliances
</span>
</li>
我做错了什么?
6条答案
按热度按时间ifsvaxew1#
试试下面的一个,希望有帮助。
eulz3vhy2#
根据提供的HTML代码,我希望它能工作:
dsf9zpds3#
在Selenium中,XPath查找对于没有指定标记名的元素的递归搜索有点混乱,所以不要使用:
//*[]
.此外,XPath有点混乱。在示例中,您正在搜索一个元素,该元素具有名为"
span
"的属性,该属性包含whatever字符串。它应该如下所示:
driver.find_element_by_xpath("//a[contains(string(.),'For Sale']").click()
如果你愿意,你可以试试germanium,这是我写的一个免费测试框架,它可以处理这种不一致性和更多问题。
click(Text("Other Home Appliances"))
wvmv3b1j4#
如果您的HTML代码中有固定字符串,则不需要使用xpath中的
contains()
方法,请使用xpath的text()
方法:使用这个的原因是,如果你的HTML代码包含两个或多个带有单词“Appliances”的元素,它不会选择任何元素。因此,为了避免这种歧义,我们可以直接使用
text()=
。希望这个有用。
vltsax255#
XPath中的这种 contains 可以用在高级场景中,比如:
@编辑:
您可以使用
$x("selector")
在Google Chrome中测试本主题中的所有XPath响应。我真的不知道python的语法(我曾经用C#创建测试),但你可以做一个丑陋的代码,将工作.尝试更改代码为python,我认为有一些错误:
z4bn682m6#
您提供的HTML未显示设备范围包含大量空白,这可能是您找不到此元素的原因。请尝试以下Xpath查找设备范围,
下面是我使用的脚本,
对于那些不在视图中的元素,请使用以下方法,