【发布时间】:2014-01-22 22:26:50
【问题描述】:
我正在使用 Python + Selenium + Splinter + Firefox 创建一个交互式网络爬虫。
python 脚本提供选项,然后 Selenium 打开 Firefox 并发送一些命令。
现在,我需要让 python 脚本知道用户想要与之交互的 web 元素。
我目前使用的方法是:
右键单击网站中的项目 (Firefox),单击“检查” element',然后点击 Firefox 检查器,点击 'copy HTML',然后 手动将其提供给脚本,然后脚本就可以继续了。
但由于显而易见的原因,我觉得这个过程远非完美。
我对javascript一无所知,但是在阅读other questions之后,我觉得javascript实际上可以成为解决方案。
Splinter 允许运行 javascript 并将返回值提取到 python 脚本中,因此,理论上:
是否可以运行一个 javascript 代码来返回用户单击的下一个元素的 html 代码?那么命名的 方法 只会右键单击所需的元素?
澄清艾米的评论:
python 脚本会打开一个 Firefox 窗口,该窗口仍保留在脚本中。 使用 splinter,可以执行 javascript 代码并在完成/信息返回时等待。 这意味着 python 脚本可以要求用户在其拥有的 Firefox 窗口中单击或右键单击,因此目标是启动一个 javascript 来“捕捉”用户单击的元素。
这足以让 javascript 捕获所需的元素吗?
【问题讨论】:
-
Javascript 仍然需要一种方法来定位“下一个所需元素”,以返回您可以与 Selenium 一起使用的标识符。根据我对您问题的理解,您可以检索页面的整个 HTML(使用 JS 或 Selenium),并使用一些 HTML 解析器对其进行解析,然后抓取您需要的内容。
-
感谢您的回答。我扩展了描述,因为我不太确定情况是否清楚。如果我检索整个 HTML 并解析生成的代码,我将无法做我想做的事:捕捉用户点击一个元素并直接使用该代码,而无需通过 ID、名称、css 专门搜索它,等
-
这看起来很相似,但在不同的上下文中使用:stackoverflow.com/questions/17157342/… 这是我应该适应我的代码的解决方案的不足吗?
-
我确实看到了您想要实现的目标,但我不明白为什么。作为一个网络爬虫,我会想象最少的用户交互。但我相信你有你的理由。考虑到这一点,我个人认为没有比您提供的链接更好的方法了。基本上是一个点击监听器,然后是一个点击处理程序来返回所需的输出。
标签: javascript python selenium splinter