Как удалить ссылку, которой нет при проверке элемента - PullRequest
1 голос
/ 17 апреля 2020

Здравствуйте, мне очень жаль этого длинного поста, но я хотел убедиться, что проблема понятна .. Я новичок в селене .. с этого сайта: "https://xangle.io/project/list", когда я нажимаю на любом из следующих элементов он выводит меня на новую страницу. clickable elements Я хочу очистить ссылки каждого из этих элементов. Но проблема в том, что когда я проверяю те элементы, которые ищут URL, я не нахожу никаких URls в html. Вот скриншот кодов html: element inspection Я посмотрел на область проверки элементов, но не смог найти никакой ссылки (возможно, я пропустил ее). В любом случае это то, что я пытался, но я не думаю, что это правильное решение:

driver = webdriver.Chrome(r'C:\Users\User\AppData\Local\Programs\Python\Python37\Lib\site-packages\chromedriver_py\chromedriver_win32.exe')


driver.get('https://xangle.io/project/list')
wait = WebDriverWait(driver, 15)
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='project-table']//div[@class='table-row']//div[3]")))
list_ = driver.find_elements_by_xpath("//div[@class='project-table']//div[@class='table-row']//div[3]")
for i in list_:
    i.click()
    print(driver.current_url)
    driver.back()

Выдает ошибку:

StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
  (Session info: chrome=80.0.3987.163)

Честно говоря, я не хочу избавляться от ошибки Я хочу найти правильный способ удаления URL, который не отображается при проверке

Ответы [ 2 ]

2 голосов
/ 17 апреля 2020

Если вы просматриваете вкладку сети, вы можете обнаружить, что эти данные взяты из ее API: https://api.xangle.io/project/list?items_per_page=50&page=0

Если вы посмотрите на ссылку в каждом проекте, вы увидите что это префиксная ссылка и его символ.

import requests

url = "https://api.xangle.io/project/list?items_per_page=50&page=0"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Safari/537.36'}
r = requests.get(url, headers=headers)
prefix = "https://xangle.io/project/"
data = r.json()
links = [prefix+d["symbol"] for d in data]
1 голос
/ 17 апреля 2020

Когда страница перезагружается, ранее найденные элементы становятся устаревшими, потому что документ, с которым вы работаете, не тот же документ, в котором были найдены элементы.

Что вы можете сделать, это немного изменить свой шаблон и не использовать список элементов повторно:

driver.get('https://xangle.io/project/list')
wait = WebDriverWait(driver, 15)
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='project-table']//div[@class='table-row']//div[3]")))
list_ = driver.find_elements_by_xpath("//div[@class='project-table']//div[@class='table-row']//div[3]")
names = [x.text for x in list_ if x.text]
for name in names:
    elem = wait.until(EC.element_to_be_clickable((By.XPATH, f'//div[@class="project-table"]//div[@class="table-row"]//div[3]//span[text()="{name}"]/..')))
    elem.click()
    print(driver.current_url)
    driver.back()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...