chromedriver не может щелкнуть при запуске скрипта, но может в оболочке - PullRequest
0 голосов
/ 12 июня 2018

У меня вообще проблема с нажатием в Chromedriver, когда код запускается Python.Этот код используется в скрипте:

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

driver.get("https://www.marktplaats.nl/")
cook_button = WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.XPATH, "//form[@method='post']/input[@type='submit']"))).click()

Это просто время ожидания, дающее "NoSuchElementException".Но если я помещаю эти строки вручную в оболочку, она щелкает как обычно.Для чего это стоит, я использую последние 2.40 Chromedriver и Chrome v67.Запуск без головы не имеет никакого значения. EDIT Программа фактически прерывается после третьей команды, когда она пытается найти элемент, который не существует, потому что щелчок не был завершен

driver.get(master_link) # get the first page
wait_by_class("search-results-table")


page_2_el = driver.find_element_by_xpath("//span[@id='pagination-pages']/a[contains(@data-ga-track-event, 'gination')]")

Таким образом, команда page_2_el выдает это исключение, но только потому, что предыдущий щелчок не был успешно завершен, чтобы удалить предупреждение о файлах cookie.И я уверен, что поиск по xpath хорош, потому что он работает с Geckodriver в Firefox, но не будет делать это здесь с Chromedriver.

EDIT2 Смотрите видео об ошибке здесь https://streamable.com/tv7w4Обратите внимание, как он немного вздрагивает, посмотрите, когда он пишет на консоли «до щелчка» и «после щелчка»

РЕШЕНИЕ Заменено

cook_button = WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.XPATH, "//form[@method='post']/input[@type='submit']"))).click()

С

N_click_attempts = 0
while 1:
    if N_click_attempts == 10:
        print "Something is wrong. "
        break
    print "Try to click."
    N_click_attempts = N_click_attempts+1
    try:
        cook_button = WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.XPATH, "//form[@method='post']/input[@type='submit']"))).click()
        time.sleep(2.0)
    except:
        time.sleep(2.0)
        break

Похоже, что щелчок завершен.У меня есть другие щелчки в скрипте, и они отлично работают с element.click (), по некоторым причинам это было проблематично.

1 Ответ

0 голосов
/ 12 июня 2018

Ваш путь правильный, но я бы предложил меньший:

//form/input[2]

И примерно NoSuchElementException - вы можете попробовать добавить паузу, чтобы дождаться, пока элемент загрузится и станет «видимым» дляselenium.Как это:

import time 
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

driver.get("https://www.marktplaats.nl/")
cook_button = WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.XPATH, "//form[@method='post']/input[@type='submit']"))).click()
time.sleep(5) # wait 5 seconds until DOM will reload

В соответствии с редактированием в вопросе, я бы предложил добавить time.sleep(5) после нажатия на кнопку.И по той же причине, потому что после щелчка все DOM перезагрузки и selenium должны ждать, пока перезагрузка не будет выполнена.На моем компьютере полная перезагрузка DOM.

занимает около 2-3 секунд.
...