Javascript Firefox+;python中的Selenium:如何以交互方式获取html元素?

Javascript Firefox+;python中的Selenium:如何以交互方式获取html元素?,javascript,python,selenium,splinter,Javascript,Python,Selenium,Splinter,我正在使用Python+Selenium+Splinter+Firefox创建一个交互式网络爬虫 python脚本提供了选项,然后Selenium打开Firefox并发送一些命令 现在,我需要让python脚本知道用户想要与之交互的web元素 我目前使用的方法是: 右键单击网站(Firefox)中的项目,单击“检查” 元素,然后在Firefox检查器中单击,然后单击“复制HTML” 手动将其馈送到脚本,然后脚本将能够继续 但由于显而易见的原因,我觉得这个过程还远远不够完美 我对javascrip

我正在使用Python+Selenium+Splinter+Firefox创建一个交互式网络爬虫

python脚本提供了选项,然后Selenium打开Firefox并发送一些命令

现在,我需要让python脚本知道用户想要与之交互的web元素

我目前使用的方法是:

右键单击网站(Firefox)中的项目,单击“检查” 元素,然后在Firefox检查器中单击,然后单击“复制HTML” 手动将其馈送到脚本,然后脚本将能够继续

但由于显而易见的原因,我觉得这个过程还远远不够完美

我对javascript一窍不通,但读完之后,我觉得javascript实际上可以成为解决方案

Splinter允许运行javascript并将返回值提取到python脚本中,因此,理论上:

是否可以运行javascript代码,返回用户单击的下一个元素的html代码?那么命名的方法将只右键单击所需的元素


Amey评论的澄清:

python脚本打开一个Firefox窗口,该窗口的控件仍然保留在脚本中。 使用splinter,javascript代码可以执行并等待完成/信息返回。 这意味着python脚本可以要求用户在其拥有的Firefox窗口中单击或右键单击,因此目标是启动一个javascript,“捕获”用户单击的元素


这是否足以让javascript捕获所需的元素?

这是一个有趣的问题。我的策略是使用Javascript向目标元素添加侦听器。因为您没有指定元素的类型,所以我使用了链接。不过,这很容易适应

单击元素时,侦听器将使用您指定的ID创建一个新的页面元素,并将value属性设置为相关信息

然后,假设您已经设置了driver.implicitly\u wait,您可以等待元素出现

driver.execute_script("for(var i = 0; i < document.links.length; i++){document.links[i].onclick = function clicked(){var e = document.createElement('a'); e.setAttribute('id','myUniqueID'); e.setAttribute('value', this); document.getElementsByTagName('body')[0].appendChild(e);};}")

clicked = driver.find_element_by_id('myUniqueID').get_attribute('value')
driver.execute_脚本(“for(var i=0;i
Javascript仍然需要找到“下一个所需元素”的方法,以返回可与Selenium一起使用的标识符。根据我对您问题的理解,您可以检索页面的整个HTML(使用JS或Selenium),并使用一些HTML解析器对其进行解析,然后获取所需内容。谢谢您的回答。我扩展了描述,因为我不太确定情况是否清楚。如果我检索了整个HTML并解析了生成的代码,我将无法做我想做的事情:捕捉用户单击某个元素并直接使用该代码,而不必通过ID、名称、css专门搜索它,等等。这看起来很相似,但在不同的环境中使用:这是我应该适应我的代码的解决方案的不足吗?我确实看到了您试图实现的目标,但我不明白为什么。作为一个网络爬虫,我会想象最小的用户交互。但我相信你有你的理由。考虑到这一点,我个人认为没有比你提供的链接更好的方法了。基本上是一个单击侦听器,然后是一个单击处理程序来返回所需的输出。太棒了!!测试和工作,完全解决问题!我的意图是将其用于网站中的任何项目,以便以后能够重现这些操作(我只做一次,自动创建刮板=),因此我需要匹配文档中的所有项目,但与创建您刚才共享的脚本相比,这种改编将是一个笑话。谢谢我编辑了您提供的脚本,以包含文档中的所有元素,但未能单击其中的一些元素。你能告诉我发生了什么事吗?在这里: