Почему мой для l oop не удается на полпути через мой список? Веб-драйвер Selenium, driver.find_element_by_xpath - PullRequest
0 голосов
/ 03 марта 2020

У меня есть список из 10 URL-адресов, которые я запускаю. Для 8 URL код работает отлично. Но это последовательно терпит неудачу во время 9-ой итерации.

Это моя трассировка:

Traceback (most recent call last):
  File "/Users/yu/PycharmProjects/linkedin/hello.py", line 97, in <module>
    images = driver.find_element_by_xpath('// img[ @ id = "ember51"]')
  File "/Users/yu/PycharmProjects/linkedin/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 394, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "/Users/yu/PycharmProjects/linkedin/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "/Users/yu/PycharmProjects/linkedin/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/Users/yu/PycharmProjects/linkedin/venv/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"// img[ @ id = "ember51"]"}
  (Session info: chrome=80.0.3987.122)

Соответствующий код:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from parsel import Selector

ChromeOptions = webdriver.ChromeOptions()
ChromeOptions.add_argument('--disable-browser-side-navigation')
driver = webdriver.Chrome('/Users/yu/Downloads/chromedriver')

linkedin_urls=driver.find_elements_by_xpath('//*[@id="rso"]/div[1]/div/div')
linkedin_urls=[url.find_element_by_xpath('div/div/div[1]/a').get_attribute('href') for url in linkedin_urls]

for linkedin_url in (linkedin_urls):
    driver.get(linkedin_url)
    sel = Selector(text=driver.page_source)

images = driver.find_element_by_xpath('// img[ @ id = "ember51"]')
print(images.get_attribute('src'))

Почему код перестал работать? Я проверил 9-й URL , и xpath одинаков для images

1 Ответ

0 голосов
/ 03 марта 2020

Ошибка на

images = driver.find_element_by_xpath('// img[ @ id = "ember51"]')

Элемент с идентификатором "ember51" является div, поэтому измените его на:

images = driver.find_element_by_xpath('// div[ @ id = "ember51"]/img')

Таким образом, когда вы пытаетесь получить атрибут sr c в следующей строке, он будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...