【问题标题】:Clicking reliably random link in python selenium phantomjs在 python selenium phantomjs 中单击可靠的随机链接
【发布时间】:2017-11-07 15:25:40
【问题描述】:

我在python中使用这个函数从当前打开的页面中选择随机链接并点击它:

def click_random_link(driver):
  print("Clicking random link ")
  links = driver.find_elements_by_xpath("//*[@href]")
  if len(links):
    l = links[randint(0, len(links) - 1)]
    print(l.get_attribute("href"))
    sleep(1)
    l.click()
    return True
  else:
    print('Link NOT found....')
    return False

看起来很简单,但它非常非常不可靠..在超过 80% 的时间内我会得到 ​​p>

errorMessage":"Element is not currently visible and may not be manipulated"

无论我在 phantomjs 中尝试什么,我都无法让它可靠地点击链接。我尝试最大化窗口,尝试聚焦链接,但没有任何效果:( 最后一枪在这里变暗,但即使是全能的谷歌没有答案...

【问题讨论】:

  • 您是否尝试在通过 xpath 定位元素后将链接滚动到视图中?通常,我发现广告/页眉/页脚可以悬停在您尝试点击的链接上
  • 我已尝试添加此链接以聚焦链接,但结果大多相同,并非 100% 可靠。 action = ActionChains(driver) action.move_to_element(l).click().perform()
  • 看来我得把它拿回来 :D,现在运行测试,到目前为止,move_to_element 都很好

标签: python selenium phantomjs


【解决方案1】:

并非所有选择器获取的链接都是可见的——其中一些可能位于隐藏的div 内部,因此即使使用action.move_to_element(l),您也无法处理它们...

要仅处理可见链接,您可以尝试以下代码:

def click_random_link(driver):
    print("Clicking random link ")
    links = [link for link in driver.find_elements_by_tag_name("a") if link.is_displayed()]
    if links:
        l = links[randint(0, len(links) - 1)]
        driver.execute_script('arguments[0].scrollIntoView();', l)
        print(l.get_attribute("href"))
        sleep(1)
        l.click()
    else:
        print('Link NOT found....')

【讨论】:

  • 有趣,我会试一试并报告:)
  • 错误结束:driver.execute_script('arguments[0].scrollIntoView();', link) NameError: name 'link' is not defined 应该是:driver.execute_script('arguments[0].scrollIntoView();', l) 这有效,仍然存在一些问题:D 不是您的代码,这似乎有效.. 但它尝试点击 javascript:vote(272507,1292405,'neg');我猜这是页面上的链接:D需要弄清楚如何从链接中删除java脚本并只保留正确的链接
  • 你说得对,我已经编辑了上面的评论,因为你正在输入:D
猜你喜欢
  • 2013-06-03
  • 2021-07-10
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多