TimeoutException с селеном. Почему это происходит, если элемент есть, и я жду, пока он станет видимым?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 TimeoutException с селеном. Почему это происходит, если элемент есть, и я жду, пока он станет видимым?

Сообщение Anonymous »

Я пытаюсь сделать простой парсинг. Идея проста: он переходит на страницу поиска электронной коммерции, нажимает на продукт, переходит на страницу продукта, собирает информацию и возвращается на страницу поиска, чтобы нажать на следующий продукт и так далее. Но он застревает при попытке найти следующую кнопку для нумерации страниц. Вот код:

Код: Выделить всё

def common_extraction():
spreadsheet_data = []
pdf_data = []
sizes = []
currency_exchange()  # Assuming this function is already defined
url_line = "https://www.scottsmenswear.com/searchresults?descriptionfilter=adidas#dcp=1&dppp=60&OrderBy=rank&Filter=1199_4098646%5EJoggers"
page = 0
i = 0
x = 0
df_spreadsheet = pd.DataFrame(columns=SPREADSHEET_COLUMNS)
pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 12)
driver.get(url_line)
WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.ID, "onetrust-accept-btn-handler"))).click()

while True:
page += 1

product_list = WebDriverWait(driver, 20).until(
EC.visibility_of_all_elements_located((By.XPATH, "//ul[@id = 'navlist']/li//a[@class = 'ProductImageList']"))
)

for index, value in enumerate(product_list):
product_list = WebDriverWait(driver, 100).until(
EC.visibility_of_all_elements_located((By.XPATH, "//ul[@id = 'navlist']/li//a[@class = 'ProductImageList']"))
)

driver.execute_script("arguments[0].scrollIntoView();", product_list[index])

image = product_list[index].find_element(By.XPATH, "//img[@class = 'rtimg MainImage img-responsive']").get_attribute("src")
print(image)

driver.execute_script("arguments[0].click();", product_list[index])

i += 1
print(i)
time.sleep(5)
driver.save_screenshot("ecommerce_project/screenshots_products/common_extraction/" + str(i) + ".png")
product_page = driver.page_source
soup = BeautifulSoup(product_page, "html5lib")
product_code = driver.current_url.split('colcode=', 1)[1]
brand_name = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, "lblProductBrand"))).text
model_name = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//span[@class ='prodTitle']//span[@id = 'lblProductName']"))).text
product_name = brand_name + model_name
print(product_name)

print(product_code)
price = soup.find("span", id='lblSellingPrice').text
price = re.sub("£", "", price)
product_price = float(price)
print(price)

size_list = driver.find_element(By.XPATH, "//ul[@id = 'ulSizes']")

if size_list:
driver.execute_script("arguments[0].scrollIntoView();", size_list)
for size in size_list.find_elements(By.XPATH, "//li[@id = 'liItem']"):
product_size = size.text
sizes.append(product_size)
if "-" in size.text:
product_size = size.text.split('-')[0]
sizes.append(product_size)
elif "("  in size.text:
product_size = size.text.split('(')[0]
sizes.append(product_size)
else:
product_size = ""
sizes.append(product_size)
print(sizes)
print("calculate price:")
price_in_reais = calculate_price_in_reais(product_price)  # Function needs to be defined
selling_price = calculate_selling_price(product_price)    # Function needs to be defined

spreadsheet_data.append({
#'Photo': image,
'Code': product_code,
'Description': product_name,
'Purchase': price_in_reais,
'Sale': selling_price,
'Sizes': sizes
})

pdf_data.append({
#'Photo': image,
'Code': product_code,
'Description': product_name,
'Price': product_price
})
driver.execute_script("window.history.go(-1)")
driver.back()

try:
driver.save_screenshot("pagination_screen.png")
print("Looking for 'Next' button...")
time.sleep(5)
next_button = WebDriverWait(driver, 500).until(
EC.element_to_be_clickable((By.XPATH, "//div[@id = 'divPagination']//a[@class = 'swipeNextClick NextLink ']"))
)

if next_button:
driver.execute_script("arguments[0].scrollIntoView();", next_button)
driver.execute_script("arguments[0].click();", next_button)
print("clicked")
x += 1
print(f"Page {x} processed.")
time.sleep(5)
else:
print("'Next' button not found. Finishing.")
break
except TimeoutException:
print("Timeout waiting for 'Next' button. Finishing.")
break

pdf.output('catalog.pdf', "F")

df_spreadsheet = pd.DataFrame(spreadsheet_data)
df_spreadsheet.to_excel("catalog.xlsx")
в этой строке ВСЕГДА возникает исключение TimeoutException:

Код: Выделить всё

proximo_botao = WebDriverWait(driver, 500).until(
EC.element_to_be_clickable((By.XPATH, "//div[@id = 'divPagination']//a[@class = 'swipeNextClick NextLink ']"))
)
Я пробовал использовать видимость и присутствие, я указал этот длинный XPATH, чтобы избежать двусмысленности, но ничего не помогло. Что в этом плохого?
Пытаемся избежать ошибок исключений по тайм-ауту.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ere-and-im
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»