【问题标题】:How to find a web element using an href attribute如何使用 href 属性查找 Web 元素
【发布时间】:2014-03-24 22:55:22
【问题描述】:

这很简单。我有一个包含 href 值的字符串。我想在包含该特定 href 的页面上找到 web 元素。我正在使用:

String href = "http://www.bing.com/images?FORM=Z9LH";
driver.findElement(By.cssSelector("a[href*='" + href + "']")).click()

如果您检查 www.bing.com,您可以看到左上角的第一个链接“图像”具有我在此处设置的 href 值。 当我运行时,它说页面上没有这样的元素。我觉得我没有使用正确的“查找依据”选项。

【问题讨论】:

    标签: java html selenium xpath selenium-webdriver


    【解决方案1】:

    这应该适合你:

    driver.findElement(By.cssSelector("li#scpt0>a")).click();
    

    【讨论】:

    • 我不相信这种单线会起作用。我需要能够动态更改变量 href 并在页面上找到元素。
    • 是的,我有。在我上面的代码中,我有一个循环,其中 href 会不断变化。不过,您的单线确实成功地点击了图片链接! (在这种情况下,在我的循环中一遍又一遍)
    • 那么你到底想做什么。您的问题似乎比您目前的问题更大、更复杂。
    • 好吧,我有一个小型网络爬虫,它会将网页上的所有链接 href 属性编译成一个列表。然后,我遍历列表中的这些字符串值并尝试单击每个链接。我无法找到已使用 href 属性作为占位符找到的每个链接。也许我可以使用链接文本?
    • 我认为链接文本更适合您尝试做的事情。
    【解决方案2】:

    据我所知,我的链接如下所示:

    href="/?scope=images&FORM=Z9LH1"
    

    因此,您可以尝试更改 href 变量的值。 (如果您使用 chrome 查看源代码,请注意您在 F12 控制台中看到的内容与您在 Ctrl+U 中看到的内容不同。Ctrl+U 通常是 web 解析器在执行任何 JS 之前看到的内容或进行子查询)

    另外,请注意搜索引擎(google、bing...)通常不喜欢被解析,他们会尽其所能使您的工作变得不可能:使用 JS、iframe、更改模式...

    【讨论】:

    • 啊,我明白了,我打算将它用于不同的网站,但只是为了快速调试,我在 google/bing 上运行它。我认为他们不喜欢被刮掉,但 href 属性是不应该改变的。 (我认为?)
    • @user2038633:我们已经有两个不同的href 链接到同一个页面,& 可以替换为&,等等...... Google 用 JS 更改了href 的值当你点击它。我听说为了使他们的网站更难解析,facebook 返回了一个呈现相同的随机页面模板。那可能是一个传奇,但总而言之,您可能应该在一个不会试图破坏它们的网站上进行测试:)
    猜你喜欢
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 2013-05-15
    • 2011-01-10
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多