如何使用Selenium从搜索结果中提取Google链接的href?

时间:2016-02-06 12:52:28

标签: python selenium phantomjs

最终,我只想尝试google搜索结果的第一个链接

我需要的信息也存在于'a'元素中,但它存储在'data-href'属性中,我无法想象如何从(get_attribute('data-href')返回{{1}中提取数据}})。

我正在使用Phantomjs,但也尝试使用Firefox网络驱动程序

href显示在Google搜索中的None标记中(可以通过检查Google搜索结果中每个链接下的绿色小链接文本找到)。

使用Selenium显然找到了引用元素,但返回的文本(citeelement.text或(get_attribute('innerHTML')))不是html中显示的内容。

例如,有一个引用标记text,但<cite class="_Rm">www.fcv.org.br/</cite>显示“wikimapia.org /.../Fundação-Cristiano-Varella-Hospital ......”

我尝试使用element.textby_css_selectortag_name和xpath检索引用元素,结果相同。

class_name

包含引用标记的div(div中只有一个)

links = driver.find_elements_by_css_selector('div.g') # div[class="g"]
link = links[0] # I am looking for the first link in the main links section
next = link.find_element_by_css_selector('div[class="s"]') # location of cite tag
nextB = next.find_element_by_tag_name('cite') 

3 个答案:

答案 0 :(得分:3)

在每个搜索结果中找到第一个a元素并获取它的href属性值:

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.get("https://www.google.com/search?q=test")

results = driver.find_elements_by_css_selector('div.g')
link = results[0].find_element_by_tag_name("a")
href = link.get_attribute("href")

然后你可以extract the actual url from the href value with urlparse

import urlparse

print(urlparse.parse_qs(urlparse.urlparse(href).query)["q"])

打印:

[u'http://www.speedtest.net/']

答案 1 :(得分:1)

搜索方法就是问题所在。它不是检索附加查询的URL,而是使用send_keys将其键发送到搜索栏,然后是ENTER。一种解决方案是检索每个页面的网址(&#39; https://www.google.com/search?q=&#39; +查询)。在这种情况下,文本检索引用,或href检索&#39; a&#39;工作原理相同,没有urlparse。或者点击谷歌的搜索按钮似乎胜过发送ENTER。

答案 2 :(得分:1)

试试这个:

module TraverseTree
  ORDERS = %i[preorder inorder postorder].each do |order|
    define_method(:"#{order}_traverse", 
      &method(:traverse_by).curry(order))
  end

  private
  def traverse_by(order, root)
    root && [
      traverse_by(order, root.left),
      traverse_by(order, root.right)
    ]
    .insert(ORDERS.index(order), root.val)
    .compact.flatten
  end
end

完整来源:https://github.com/jagdeepjain/ui-automation-testng