【问题标题】:Click an image which has a specific name单击具有特定名称的图像
【发布时间】:2012-12-30 14:33:59
【问题描述】:

如何使用 Python mechanize 点击如下图?

<a href="..."><img name="next" id="next" src="..."></a>

我知道要点击的图片的名称和 ID。我需要以某种方式识别父链接并单击它。我该怎么办?

额外问题:如何检查是否有这样的图像?

【问题讨论】:

  • 图片放在哪里?在网站上、在 GUI 上还是在第三方上?
  • @Evilunclebill 在网站上。
  • 那我帮不了你,因为我不知道 python 与 web 一起工作 :-) 试着看看这个:docs.python.org/2/library/…

标签: python mechanize


【解决方案1】:

不用机械化,用bs4(beautifulsoup 4)做起来很简单。

from bs4 import BeautifulSoup
import urllib2
text = urllib2.urlopen("http://yourwebpage.com/").read()
soup = BeautifulSoup(text)
img = soup.find_all('img',{'id':'next'})
if img:
    a_tag = img[0].parent
    href = a_tag.get('href')
    print href

使用 bs4 检索父标签非常容易,因为在使用 find_all 函数找到标签之后,不外乎.parent由于find_all 函数返回一个数组,以后最好使用if img:,但由于这可能不适用于您的网站,所以这样做是安全的。 见下文。

编辑:我已更改代码以包含“奖励问题”,这是我在上面描述的替代方法。

【讨论】:

    【解决方案2】:

    对于您的额外问题 - 我想说您可以使用 BeautifulSoup 来检查 img 元素是否有效。您可以使用 urllib 来查看图像是否存在(至少,服务器是否会将其传递给您 - 否则您将收到错误消息)。

    您还可以查看this thread,有人比我回答的更聪明 - 它似乎在讨论一个名为 SpiderMonkey 的库以及机械化无法单击按钮。

    【讨论】:

      【解决方案3】:

      好吧,我不知道如何使用 Mechanize,但是我知道如何使用 lxml

      假设我们的网页有这样的代码: &lt;a href="page2.html"&gt;&lt;img name="bla bla" id="next" src="Cat.jpg"&gt;&lt;/a&gt;。使用lxml,我们将编写以下代码:

      from lxml import html
      page = urlllib2.urlopen('http://example.com')
      tree = html.fromstring(page.read())
      link = tree.xpath('//img[@id="next"]/ancestor::a/attribute::href')
      

      大部分魔法发生在tree.xpath 函数中,您首先使用//img[@id="next"] 定义您要查找的图像,然后指定您正在查找它之前的a 标签:@ 987654328@ 并且您正在寻找专门的 href 属性:/attribute::href。链接变量现在将包含与该查询匹配的字符串列表 - 在这种情况下,链接 [0] 将是 page2.html - 您可以使用 urlopen(),从而有效地单击它。

      对于//img[@id="next"] 部分,您可以使用其他属性,例如://img[@name="bla bla"],它会正常工作。您只需要考虑哪种属性更适合这种情况。

      我知道这个答案不使用 Mechanize,但我希望它是一个有用的指针。祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-28
        • 2019-07-29
        • 2015-04-02
        • 1970-01-01
        相关资源
        最近更新 更多