Событие щелчка в Python Selenium DOM работает не так, как предполагалось

#python-3.x #selenium #dom

#python-3.x #selenium #dom

Вопрос:

Я пытаюсь щелкнуть ссылки на разбивку на страницы (кнопка далее). Однако щелчок переходит на домашнюю страницу сайта. Я ориентируюсь на элемент по классу. Что может быть не так?

 driver.get('https://www.marinetraffic.com/en/data/?asset_type=vesselsamp;columns=flag,shipname,photo,recognized_next_port,reported_eta,reported_destination,current_port,imo,ship_type,show_on_live_map,time_of_latest_position,lat_of_latest_position,lon_of_latest_positionamp;current_port_in|begins|FUJAIRAH ANCH|current_port_in=20585')

# Wait 30 seconds for page to load
timeout = 30
try:
    WebDriverWait(driver, timeout).until(EC.presence_of_element_located((By.CLASS_NAME, 'MuiButtonBase-root-60')))
    element = driver.find_element_by_class_name('MuiButtonBase-root-60')
    driver.execute_script("arguments[0].click();", element)


except TimeoutException:
    print("Timed out waiting for page to load")


driver.quit()
  

Комментарии:

1. Пожалуйста, добавьте html элемента, на который вы пытаетесь щелкнуть.

Ответ №1:

Используйте следующий код :

 driver.get('https://www.marinetraffic.com/en/data/?

asset_type=vesselsamp;columns=flag,shipname,photo,recognized_next_port,reported_eta,reported_destination,current_port,imo,ship_type,show_on_live_map,time_of_latest_position,lat_of_latest_position,lon_of_latest_positionamp;current_port_in|begins|FUJAIRAH ANCH|current_port_in=20585')

# Wait 30 seconds for page to load
timeout = 30
try:
    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//p[text()='Page']//..//following-sibling::button")))  
    driver.execute_script("arguments[0].click();", element)

except TimeoutException:
    print("Timed out waiting for page to load")


driver.quit()
  

Комментарии:

1. Спасибо. Это сработало.. Вы использовали какой-либо инструмент для копирования XPATH элемента? Когда я использую chrome Dev Tool. Я получаю что-то вроде этого. //*[@id="reporting_ag_grid"]/div/div[2]/div[3]/div/div/div/div/div[3]/button[2]

2. @NoushadMoidunny: дайте мне свой идентификатор gmail

3. @NoushadMoidunny: поможет вам при вызове hangout

Ответ №2:

В этом классе 33 элемента, find_element_by_class_name возвращает первый (который расположен в заголовке). Вы можете использовать нижний колонтитул в качестве отправной точки, чтобы сузить выбор опций и выбрать вторую кнопку, используя индекс (нет разницы между следующей и предыдущей, когда доступны обе)

 element = WebDriverWait(driver, timeout).until(EC.visibility_of_element_located((By.CSS_SELECTOR, '.r-mtGridFooter-302 button:nth-of-type(2)')))
element.click()