【问题标题】:Validate urls using Python and Selenium使用 Python 和 Selenium 验证 url
【发布时间】:2020-09-13 08:59:02
【问题描述】:

我想做一些基本的 url 验证,如果 url 无效,除非用户输入了有效的,否则不应继续请求。 更新:为了更清楚,我不希望打开浏览器并运行图像计数器 scipt,除非输入的 Url 有效。

import time 
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

user_url = input('Please enter a valid url:')
driver = webdriver.Chrome('/home/m/Desktop/chromedriver')
driver.get(user_url)
HEADERS = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36', 'accept': '*/*'}

time.sleep(8)

imagecounter = driver.find_elements_by_css_selector('img')

print('Number of HTML image tags:')
print(len(imagecounter))

您能否修改代码并解释发生了什么? 我尝试了一些库,但我认为由于我的编码能力差,没有运气。

【问题讨论】:

  • 你需要定义什么是“有效”,什么是“无效”
  • 我建议先用pythonsurlparse验证语法,然后用sleep(8),然后验证url响应代码,然后找到元素。

标签: python selenium validation url python-requests


【解决方案1】:

可以使用请求获取HTTP状态码

    import requests
    import time 
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys

    user_url = input('Please enter a valid url:')

    # send a get request to the page, and if the status code is not OK
    # ask for a different url
    def valid_url(url):
        try:
            req = requests.get(url)
            while req.status_code != requests.codes['ok']:
                  return valid_url(input('Please enter a valid url:'))
        except Exception as ex:
            print(f'Something went wrong: {ex}')
            print('Try again!')
            return valid_url(input('Please enter a valid url:'))


        return url

    url = valid_url(user_url)
    driver = webdriver.Chrome()
    driver.get(url) # funtion is called here
    HEADERS = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36', 'accept': '*/*'}

    time.sleep(8)

    imagecounter = driver.find_elements_by_css_selector('img')

    print('Number of HTML image tags:')
    print(len(imagecounter))

【讨论】:

  • 如果我输入类似“something.com”的内容,我会收到错误消息。 requests.exceptions.MissingSchema:无效的 URL 'something.com':未提供架构。也许你的意思是something.com
  • 如果我输入无效的 URL,例如 https://stackkkkkkkkkkoverflow.com,我会收到错误:无法建立新连接:[Errno -2] 名称或服务未知
  • 在这种情况下,您可以添加一个 try-except。我编辑了答案
  • 感谢您的编辑,不幸的是我仍然收到错误:如果我输入“sometext”脚本会提示我再次输入,但如果我在其后加上有效的 url,它就会崩溃。
  • 如果我第一次输入像 https://stackover888888flow.com/ 这样的无效网址,它会提示再次输入有效网址,但之后如果输入有效网址,脚本不会返回所有图像标签.
【解决方案2】:

要在继续之前验证用户提供的 url,您可以使用 Python 的 模块来检查请求状态,您可以使用以下解决方案:

  • 代码块:

    from selenium import webdriver
    import requests
    
    while True:
        user_url = str(input("Please enter a valid url:"))
        req = requests.get(user_url)
        if req.status_code != requests.codes['ok']:
            print("Not a valid url, please try again...")
            continue
        else:
            break
    print("URL was a valid one... Continuing...")
    driver = webdriver.Chrome(executable_path=r'C:\WebDrivers\chromedriver.exe')
    driver.get(user_url)
    # perform your rest of the tasks
    
  • 控制台输出:

    Please enter a valid url:https://www.goodday.com
    Not a valid url, please try again...
    Please enter a valid url:https://www.goodday.com
    Not a valid url, please try again...
    Please enter a valid url:https://www.goodday.com
    Not a valid url, please try again...
    Please enter a valid url:https://www.google.com
    URL was a valid one... Continuing...
    
    DevTools listening on ws://127.0.0.1:54638/devtools/browser/975e0993-166a-4144-a05f-dcfb1d9b29a2
    

参考

您可以在以下位置找到一些相关讨论:

【讨论】:

  • 谢谢,但很遗憾,如果我输入如下内容,它就不起作用:''sometext345''
  • @ArashIzmirov 您要求用户提供有效的url,并且 url 通常由三个或四个组件组成,例如a) 一个方案。b) 一个主机 c) 一个路径 d) 一个查询字符串。您正在测试的输入,即 sometext345 不是 url,而是一个字符串。请参阅我使用的示例。
  • 感谢您的努力和解释,您帮了很多忙。
  • @ArashIzmirov Vote up questions and answers 你觉得很有帮助。见Why is voting important
猜你喜欢
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 2020-03-11
  • 2020-01-10
  • 2021-02-04
相关资源
最近更新 更多