当前位置: 首页 > 面试题库 >

如何访问所有URL的Selenium Python

毕嘉
2023-03-14
问题内容

我正在尝试访问所有显示的URL,但它首先访问的不是全部

Google搜索网址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('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

在这一行代码中,您无法捕获有关程序为何按预期运行的任何信息。 它引发的异常可以帮助您改进代码,而不要像这样那样对待它。

现在,回到您的问题。在您的代码中,存在一些逻辑错误,例如[@Mohammad Rakib
Amin的answer]。因此,对您的代码进行一些更改,您得到了:

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)

但这并不能解决您的问题,您的浏览器只会像您描述的那样访问此第一个URL并引发Exception:

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在第二个循环中做了一些。

PS:您的问题应该包含所有需要的代码,这样其他人可以更轻松地为您提供帮助。



 类似资料:
  • 我想做一个像相册一样的lib改编成Android Q 由于范围存储,不推荐使用; 我们不能直接通过这样的路径读取文件 没有URI之类的值,因此我无法通过ContentProvider获取图片。 我们可以通过这种方式只打开一个图片(下面的代码),并且在回调中接收到一个URI; 但是我想访问所有的图片,那么,我如何扫描所有的图片在Android Q?

  • 我正在试验WikipediaAPI,并试图获取特定页面上所有图像的完整URL,在本例中为谷歌主页(http://en.wikipedia.org/wiki/Google). 我通过使用另一个API找到了页面id,然后尝试在以下API中使用此信息来获取该页面上所有图像的完整URL: http://en.wikipedia.org/w/api.php?action=query 我从中获得了一些页面图像

  • 从Lollipop开始,应用程序可以访问真正的SD卡(在Kitkat上无法访问,之前的版本还没有正式支持),正如我在这里询问的那样。 因为现在已经很少看到支持SD卡的Lollipop设备了,因为模拟器没有这个功能(或者真的有吗?)为了模拟SD卡支持,我花了很长时间来测试它。 不管怎样,似乎不是使用普通的文件类来访问SD卡(一旦获得了权限),而是需要使用URI,使用DocumentFile。 这限制

  • URL格式 ThinkCMF5采用的是混合模式路由,也就是说同时支持路由和PATH_INFO方式; 如果没有设置路由规则,默认就采用PATH_INFO方式,URL 格式如下: http://yourServerName/index.php/应用/控制器/操作/[参数名/参数值...] URL大小写 ThinkCMF5的 URL 是不区分大小写的,如: http://localhost/index

  • URL格式 ThinkCMF6.0采用的是混合模式路由,也就是说同时支持路由和PATH_INFO方式; 如果没有设置路由规则,默认就采用PATH_INFO方式,URL 格式如下: http://yourServerName/index.php(或其它入口文件)/应用/控制器/操作/[参数名/参数值...] URL大小写 ThinkCMF的 URL 是不区分大小写的,如: http://local

  • URL设计 ThinkPHP5.1在没有定义路由的情况下典型的URL访问规则是: http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/[参数名/参数值...] 支持切换到命令行访问,如果切换到命令行模式下面的访问规则是: >php.exe index.php(或者其它应用入口文件) 模块/控制器/操作/[参数名/参数值…] 可以看到,无论是URL访问