не получается обратиться к элементу из-за автообновления страницы
Не получается обратится к элементу страницы, так-как блок, в котором находится элемент, постоянно каждые несколько секунд обновляется.
UPD: Я выяснил, что оно обновляется, из-за приходящих get запросов. Теперь у меня другой вопрос, можно ли через Selenium сделать блокировку запросов или самому отловить приходящий json.

Вот код:
WebDriverWait(driver, timeout=10).until(visibility_of(driver.find_element(By.XPATH,"/html/body/div[1]/div[7]/div[2]/div[1]/div[4]/div[1]/div[3]/div[4]/div[1]/div[1]/div[2]/span[2]")))
firstcost = driver.find_element(By.XPATH,"/html/body/div[1]/div[7]/div[2]/div[1]/div[4]/div[1]/div[3]/div[4]/div[1]/div[1]/div[2]/span[2]").text.replace(' руб.','')
Вот ошибка:
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element:/html/body/div[1]/div[7]/div[2]/div[1]/div[4]/div[1]/div3/div[4]/div[1]/div[1]/div[2]/span[2]
Страница, с которой я работаю: тык
Ответы (2 шт):
Во-первых, насколько вижу, у вас неправильный путь указан. Xpath можно напрямую в консоли разработчика вставлять и смотреть селект элемента. Правильный /html/body/div[1]/div[7]/div[2]/div[2]/div[4]/div[1]/div[3]/div[4]/div[1]/div[1]/div[2]/span[2]. Как вариант можно отталкиваться от id элеметов и не завязываться на последовательности из кучи тэгов. Другое возможное решение, если элемент не находится, повесить обработку в setInterval или иначе асинхронно проверять наличие элемента. Но думаю, в вашем случае, просто неправильно указали XPath
Решил проблему тем, что отловил приходящий get запрос при загрузке страницы.
import requests as req
from playwright.sync_api import sync_playwright
def run(playwright, link):
links = []
firefox = playwright.firefox
browser = firefox.launch()
page = browser.new_page()
page.on("request", lambda request: links.append(request.url))
page.goto(link)
browser.close()
#Ниже я уже достаю нужную для себя ссылку
ans = links[-1]
txt = ans.find('currency=')
if ans[txt + len('currency=')] == '1':
ans = ans.replace('1', '5', 1)
res = req.get(ans)
data = res.json()
return data
link = 'https://steamcommunity.com/market/listings/730/%E2%98%85%20Bowie%20Knife%20%7C%20Tiger%20Tooth%20%28Minimal%20Wear%29'
with sync_playwright() as playwright:
data = run(playwright, link)