jquery - 将字符串从 JS 传递到 Python Selenium

标签 jquery python selenium-chromedriver

我正在使用 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/

相关文章:

python - ConfigParser pyodc 生成错误'无效 - 用户名 (12) (SQLDriverConnect)

vba - 使用 selenium 在 vba 中创建后期绑定(bind)方法

java - 使用最新的 chromedriver 2.28 出现错误 - 断开连接 : received Inspector. 分离事件

jquery - 事件管理 - 根据第一个下拉菜单的选择刷新第二个下拉菜单 (Rails 3.2)

javascript - 提交时在本地保存表单更改

JavaScript Ajax 数据是数组,但长度未定义

python - 如何在selenium上抓取产品详细信息页面

javascript - 如何为属性创建javascript事件监听器

python - 无法连接到我的 AWS 数据库实例 | psql : could not connect to server: Operation timed out

Python - 从 C++ DLL 错误打印值