4

如何使用 selenium API for python 在给定网页上单击随机链接。? 我正在使用python 2.7。谢谢

4

3 回答 3

9

find_elements_by_tagname() 肯定会起作用。还有另一种选择。您可以在可以传递空字符串的地方使用 find_elements_by_partial_link_text。

>>> from selenium import webdriver
>>> from random import randint

>>> driver = webdriver.Firefox()
>>> driver.get('http://www.python.org')

>>> links = driver.find_elements_by_partial_link_text('')
>>> l = links[randint(0, len(links)-1)]
>>> l.click()
于 2013-06-07T10:33:23.433 回答
1

driver = webdriver.Firefox()
driver.get('https://www.youtube.com/watch?v=hhR3DwzV2eA')


# store the current url in a variable
current_page = driver.current_url

# create an infinite loop
while True:
    try:
        # find element using css selector
        links = driver.find_elements_by_css_selector('.content-link.spf-link.yt-uix-sessionlink.spf-link')

        # create a list and chose a random link
        l = links[randint(0, len(links) - 1)]

        # click link
        l.click()

        # check link
        new_page = driver.current_url

        # if link is the same, keep looping
        if new_page == current_page:
            continue
        else:
            # break loop if you are in a new url
            break
    except:
        continue

创建列表工作,但如果您遇到像我这样的问题,如果您不断收到超时错误或您的网络驱动程序没有始终单击链接,请使用此代码。

例如,我使用了一个 YT 视频。假设您要单击右侧的推荐视频,那么它具有用于这些链接的独特 css 选择器。

当你制作一个元素列表时,你想要进行无限循环的原因是 b/c,由于某种原因,python 不能很好地表达存储的元素。确保你有一个 catch all 'except' b/c 你会得到超时错误等,你想强制它点击随机链接。

于 2017-01-29T08:15:07.400 回答
0

如何生成页面上所有可用链接的列表,然后单击该列表中的随机元素?

list = driver.find_elements_by_tagname("a")
list[random.Random(0, len(list)].click()

(我希望这就是你在 python 2.7 中使用 random 的方式,我是 python 3.3 用户,对不起)

于 2013-06-07T10:16:57.077 回答