reports - PullRequest
       120

reports

0 голосов
/ 23 января 2019

Я хочу найти неработающие ссылки на моей веб-странице с помощью Selenium + Python.Я попробовал приведенный выше код, но он показывает мне следующую ошибку:

requests.exceptions.MissingSchema: Invalid URL 'None': No schema supplied. Perhaps you meant http://None?

Проверка кода:

for link in links:

    r = requests.head(link.get_attribute('href'))
    print(link.get_attribute('href'), r.status_code)

Снимок полного кода

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Это сообщение об ошибке ...

    raise MissingSchema(error)
requests.exceptions.MissingSchema: Invalid URL 'None': No schema supplied. Perhaps you meant http://None?

... означает, что Поддержка доменных имен и путей Unicode не удалось в собранном hrefатрибут.

Эта ошибка определяется в models.py следующим образом:

    # Support for unicode domain names and paths.
    scheme, auth, host, port, path, query, fragment = parse_url(url)
    if not scheme:
        raise MissingSchema("Invalid URL {0!r}: No schema supplied. "
                            "Perhaps you meant http://{0}?".format(url))

Решение

Возможно, вы пытаетесь найти неисправныйссылки, как только результаты поиска доступны для ключевого слова селен на Поле поиска на главной странице Google .Для этого вы можете использовать следующее решение:


Обновление

В соответствии с вашим встречным вопросом было бы немного сложно ответить на вопрос, почему xpath работает, но не tagName с Селен перспектива.Возможно, вам захочется углубиться в эти обсуждения для того же:

0 голосов
/ 23 января 2019

Попробуйте, я почти уверен, что могут быть более эффективные способы сделать это, и это может решить, а может и не решить вашу проблему. В свободное время я бы применил этот подход, и, похоже, он работает для меня

import itertools
import requests
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys

driver = Chrome()
driver.get('https://www.google.com/')

# Search 'selenium'
search = driver.find_element_by_css_selector('input[aria-label="Search"]')
search.send_keys('selenium')
search.send_keys(Keys.ENTER)

# Resuls div
container = driver.find_element_by_id('rso')
results = container.find_elements_by_css_selector('.bkWMgd')
del results[1]

# links
_links = []
for result in results:
    _links.append([r.get_attribute('href') for r in result.find_elements_by_css_selector('.r>a')])

driver.quit()
links = list(itertools.chain.from_iterable(_links))

for link in links:
    r = requests.get(link)
    print(link, r.status_code)

выход

https://www.seleniumhq.org/ 200
https://www.seleniumhq.org/projects/webdriver/ 200
https://www.webmd.com/a-to-z-guides/supplement-guide-selenium 200
https://www.healthline.com/nutrition/selenium-benefits 200
https://github.com/SeleniumHQ/selenium 200
https://en.wikipedia.org/wiki/Selenium_(software) 200
https://www.medicalnewstoday.com/articles/287842.php 200
https://ods.od.nih.gov/factsheets/Selenium-Consumer/ 200
https://selenium-python.readthedocs.io/ 200
https://selenium-python.readthedocs.io/installation.html 200
...