从Python字符串传递到JS

2024-09-30 14:30:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我将Python/Selenium与Chrome webdriver一起使用,并尝试根据另一个<td>的内容检索一个url。我的标记看起来像:

<div class="targetclass">
    <tr>
       <td><a href="retrieve@email.com">emailval2</a></td>
       <td><a href="target@email.com">emailval</a></td>
    </tr>
</div>

使用jQuery和脚本执行器很容易做到:

^{pr2}$

但是,当我尝试存储返回的href以与webdriver一起使用时,我得到了以下结果:

aurlval = driver.execute_script("$('div.targetclass a[href$=\"target@email.com\"]').parents(\"tr\").find(\"a:first\").attr('href')")
print (aurlval)

返回值为

None

如何存储目标url(retrieve@email.com),以便使用webdriver对其进行操作?在


Tags: divcomurl内容targetemailseleniumchrome
2条回答

我对Selenium的经验仅限于一些利基案例,在这些案例中,我希望实现一些自动化(对于抓取,我通常可以通过请求和美化组来实现),但我相信您得到的原因是execute_script没有返回一个值开始(您的脚本基本上只是被注入到网页中在浏览器中执行)。Iirc,您应该能够将jquery解析为(详细地):

div = driver.find_element_by_class_name("targetclass")
targeta = div.find_element_by_link_text("target@email.com")
tr = targeta.parent.parent
retrieve = tr.find_element_by_tag_name("a")
aurlval = retrieve.getattribute("href")

如果Selenium对list和first元素有单独的方法,我想不起来了,所以您可能必须在这些行上使用零索引。在

一种方法是使用下面的javascript获取表行以及前面的答案步骤。WebDriver没有自己的“parent”方法。在

div = driver.find_element_by_class_name("targetclass")
targeta = div.find_element_by_link_text("target@email.com")
tr = self.driver.execute_script("return arguments[0].parentNode.parentNode;", targeta)

然后可以在行中找到元素。在

或者您可以尝试“return arguments[0].parentNode;”,它应该获取td,然后尝试获取以前的同级,但我没有尝试过。在

相关问题 更多 >