gpt4 book ai didi

python - 在 xpath 中使用子节点作为限定符,用于 selenium webdriver

转载 作者:行者123 更新时间:2023-11-28 18:35:30 25 4
gpt4 key购买 nike

我在 Django (Python) 应用程序中使用 selenium webdriver。然而,我的问题是 xpath。

出于某种原因,学校没有标准化一个中央来源来查找成绩单信息,并且完全享受向以前的学生收取点击按钮的精彩服务,同时要求付款方进行订购工作。我正在自动订购它们并遇到了我编写的函数无法处理的这个最近的模式:

<a href="HTTPS://hccadvisor.hccfl.edu:443/WebAdvisor/WebAdvisor?TOKENIDX=4932326730&amp;type=P&amp;pid=UT-LGRQ" 
onmouseover="window.status=''; return true;">
<span class="label">Log In </span>
</a>

每次都必须抓取,因为 token 被钉在中间。

我的函数正在调用

def access_link_by_text(text, driver):
block = driver.find_element_by_xpath("//a[text()='{text}']".format(text=text))
link = block.get_attribute('href')
driver.get(link)

但在我的其他两个学校网站上,我看到将文本包装在 span 中:

login_block = hcc_driver.find_element_by_xpath("//a/span[text()='Log In ']")
login_link = login_block.get_attribute('href')

在哪里login_link不存在,因为 login_block没有捕获 <a href...我想要它。它捕获了 span ,因为我说“任何带有 span children 的文本是 Log In”。我想捕获 a使用子跨度作为测试,所以我尝试了:

login_block = hcc_driver.find_element_by_xpath("//a/child::span[text()='Log In ']")

同样失败了。

你如何使用 child / parent / sibling 作为资格测试,而不是试图挑选他们以便我可以获得此链接?

谢谢

最佳答案

Where login_link does not exist, as login_block is not grabbing the <a href... that I want it to. It grabs the span, since I said "any a's with span children whose text is Log In ". I want to grab the a using the child span as a test, so I tried:

你很接近。您可以嵌套谓词。解决方案应该是:

//a[child::span[text()='Log In ']]

这将选择每个 <a>在具有跨度的文档中,该跨度的文本节点包含文本 "Log In " .您可能需要注意可能添加的空格,这样更安全一些:

//a[child::span[normalize-space(text())='Log In']]

为了好玩,您还可以还原您的表达式,如果您发现它更具可读性的话:

span[normalize-space(text())='Log In']/parent::a

关于python - 在 xpath 中使用子节点作为限定符,用于 selenium webdriver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32790428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com