在python selenium phantomjs中单击可靠的随机链接

时间:2017-11-07 15:25:40

标签: python selenium phantomjs

我在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%的时间里我会得到

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

无论我在phantomjs中尝试什么,我都可以让它可靠地点击链接..我已经尝试了maxime窗口,尝试聚焦链接,没有任何作用:(最后一次拍到黑暗,但是甚至万能的谷歌没有答案......

1 个答案:

答案 0 :(得分: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....')