Селен не может продолжаться после заполнения поля - PullRequest
0 голосов
/ 24 октября 2019

Ниже кода щелкает поле, заполняет его Hyundai и нажимает клавишу ввода, что должно закрыть раскрывающееся меню. Но это никогда не происходит, поэтому оно не продолжает заполнять следующее поле.

До сих пор я пытался заставить его щелкнуть в любом месте, чтобы закрыть раскрывающийся список - не сработало. Попытка добавления .submit () и .click () после send_keys () - не работает.

Желаемый результат: Позвольте мне заполнить следующее поле.

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

Вот где он застрял:

stuck image

Второй комментарий: я набрал несколько Keys.TAB, но это не отвечает на это. Я не уверен, как решить эту загадку ..

.send_keys("Hyundai", Keys.ENTER, Keys.TAB, Keys.ENTER, Keys.TAB, Keys.TAB, Keys.TAB)
#imports
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options

#options
chrome_options = Options()
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-gpu")
#chrome_options.add_argument("--headless")

# enable browser logging
d = DesiredCapabilities.CHROME
d['loggingPrefs'] = { 'browser':'ALL' }
driver = webdriver.Chrome(desired_capabilities = d, options=chrome_options)
driver.fullscreen_window()

driver.get("https://forsikringsguiden.dk/#!/bilforsikring/manuel")  #URL

#Fills out field called "Mærke" with Hyundai      
marke = driver.find_element_by_xpath('//*[@id="s2id_carSelectedMake"]/a').click()
driver.find_element_by_xpath('//*[@id="s2id_autogen1_search"]').send_keys("Hyundai", Keys.ENTER)

#next field to fill out
model = driver.find_element_by_xpath('//*[@id="s2id_autogen2"]').click()
driver.find_element_by_xpath('//*[@id="s2id_autogen3_search"]').send_keys("i30", Keys.ENTER)

Обновление: я полагаю, причина, по которой он застревает в первом поле, заключается в "наложении" - id = select2-drop-В маску я добавил следующие строки javescript:

js = "var aa=document.getElementsByClassName('select2-drop-mask')[0];aa.parentNode.removeChild(aa)"
driver.execute_script(js)

Это похоже на работу, но теперь оно продолжает прыгать между полями 1 и 2.

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Чтобы выбрать модель автомобиля, вам нужно захватить элемент Select html, например:

select = Select(driver.find_element_by_css_selector("#carSelectedMake"))

, затем выберите опцию по вашему выбору видимым текстом:

select.select_by_visible_text("Kia")

Другие поля будут работать таким же образом, мне удалось взаимодействовать с селектором модели через: ng-model='carSelectedModel'

0 голосов
/ 24 октября 2019

Это происходит из-за того, что фокус элемента не достигнут.

Вам нужно прокрутить вниз, пока элемент не появится на странице.

Добавьте ниже код Python в вашем скрипте:

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

ИЛИ

driver.execute_script("scrollBy(0,250);")

Ниже код Java работает для меня:

    WebDriver driver = new ChromeDriver();
    driver.get("https://forsikringsguiden.dk/#!/bilforsikring/manuel");

    Thread.sleep(5000);

    WebElement e1= driver.findElement(By.xpath("//*[@id='s2id_carSelectedMake']/a"));

    JavascriptExecutor jse = (JavascriptExecutor) driver;
    jse.executeScript("arguments[0].scrollIntoView();", e1);

    e1.click();

    Thread.sleep(2000);

    driver.findElement(By.xpath("//*[@id='s2id_autogen1_search']")).sendKeys("Hyundai", Keys.ENTER);

    jse.executeScript("arguments[0].scrollIntoView();", e1);

    WebElement e2= driver.findElement(By.xpath("//*[@id='s2id_autogen2']"));

    jse.executeScript("arguments[0].scrollIntoView();", e2);

    e2.click();

    Thread.sleep(2000);

    driver.findElement(By.xpath("//*[@id='s2id_autogen3_search']")).sendKeys("i30", Keys.ENTER);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...