如何访问所有 URL 的 Selenium Python

2024-03-22

我试图访问所有显示的网址,但它首先访问而不是所有

谷歌搜索网址

    browser.get('https://www.google.co.uk/search?q=Rashmi&oq=Rashmi&aqs=chrome..69i57j69i60l3.6857j0j1&sourceid=chrome&ie=UTF-8#q=Rashmi+Custom+Tailors')
    time.sleep(5)

    try:        
        p_links = browser.find_elements_by_css_selector(' div > h3 > a')
        url_list = []
        for urls in p_links:
            if "Rashmi Custom Tailors" in urls.text:

                url = urls.get_attribute("href")
                url_list.append(url)
                for url in url_list:
                    browser.get(url)
                    time.sleep(4)

    except:
        pass

你的问题是你的结果不好的做法通过使用:

try:
   do something
except:
    pass

通过这行代码块,您无法捕获有关程序为何按预期运行的任何信息。它抛出的异常可以帮助您改进代码,不要像这样忽略它。

现在,回到你的问题。在您的代码中,存在一些逻辑错误,例如@穆罕默德·拉基布·阿明的回答 https://stackoverflow.com/a/43400417/6597344。因此,对您的代码进行一些更改,您会得到以下结果:

from selenium import webdriver
browser = selenium.Chrome()
browser.get('https://www.google.co.uk/search?q=Rashmi&oq=Rashmi&aqs=chrome..69i57j69i60l3.6857j0j1&sourceid=chrome&ie=UTF-8#q=Rashmi+Custom+Tailors')
time.sleep(5)
p_links = browser.find_elements_by_css_selector(' div > h3 > a')
for urls in p_links:
    if "Rashmi Custom Tailors" in urls.text:
        url = urls.get_attribute("href")
        browser.get(url)
        time.sleep(4)

但这并没有解决你的问题,你的浏览器只会访问第一个网址 就像您所描述的那样并引发异常:

StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

抛出此异常是因为在第二次循环期间,您正在使用的元素不再附加到浏览器的当前页面。

解决方案就像您所做的那样,找到所有元素并将所有 url 添加到列表中。你像这样迭代列表,它在我的计算机上运行良好。尝试一下:

from selenium import webdriver

browser = webdriver.Chrome()
query_url = "https://www.google.co.uk/search?q=Rashmi&oq=Rashmi&aqs=chrome..69i57j69i60l3.6857j0j1&sourceid=chrome&ie=UTF-8#q=Rashmi+Custom+Tailors"
browser.get(query_url)
p_links = browser.find_elements_by_css_selector("div > h3 > a")
urls = []
for elem in p_links:
    text = elem.text
    url = elem.get_property('href')
    if "Rashmi Custom Tailors" in elem.text:
        urls.append(url)

for url in urls:
    browser.get(url)

也许你做了一些indent error在你的第二个循环中。

P.S:您的问题应该包含所需的所有代码,这样其他人可以更轻松地帮助您。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何访问所有 URL 的 Selenium Python 的相关文章

随机推荐