我正在使用 Python/Selenium 和 Chrome webdriver,并且我正在尝试从 <td>
检索一个网址。基于另一个<td>
的内容。我的标记如下所示:
<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 和脚本执行器就足够简单了:
with open('jquery-3.2.1.min.js', 'r') as jquery_js:
jquery = jquery_js.read() #read the jquery from a file
driver.execute_script(jquery) # activate the jquery lib
driver.execute_script("$('div.targetclass a[href$=\"target@email.com\"]').parents(\"tr\").find(\"a:first\").attr('href')")
但是,当我尝试存储返回的 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
),以便我可以使用网络驱动程序对其进行操作?
最佳答案
我使用 Selenium 的经验仅限于一些我想要一些自动化的小众案例(对于抓取,我通常可以通过请求和 BeautifulSoup 来完成),但我相信您得到 None 的原因是因为execute_script
一开始并不返回值(您的脚本基本上只是被注入(inject)到网页中并在浏览器中执行)。 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是否有单独的列表和第一个元素的方法,所以你可能必须在这些行上采用零索引。
关于jquery - 将字符串从 JS 传递到 Python Selenium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43836825/