填写字段后,硒无法继续

时间:2019-10-24 09:23:21

标签: python selenium selenium-webdriver

下面的代码单击一个字段,将其填充为现代,然后按Enter,这将关闭下拉菜单。但是它永远不会,因此不会继续填写下一个字段。

到目前为止,我尝试告诉它单击任何位置以关闭下拉菜单-无效。 尝试在send_keys()之后添加.submit()和.click()-不起作用。

期望的结果:让我填写下一个字段。

编辑:每次重新加载时,我注意到要选择更改的字段的ID。有办法解决吗?

在这里被卡住了:

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-mask我添加了以下javescript行:

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

这看起来像是工作,但现在它继续在字段1和2之间跳下来。

2 个答案:

答案 0 :(得分:0)

发生这种情况是由于没有实现元素的焦点。

您需要向下滚动,直到元素出现在页面上。

在脚本中添加以下python代码:

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

OR

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);

答案 1 :(得分:0)

要选择汽车模型,您需要捕获Select html元素,如下所示:

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

然后通过可见文本选择您所选择的选项:

select.select_by_visible_text("Kia")

其他字段将以相同的方式工作,我设法通过以下方式与模型选择器进行交互:ng-model='carSelectedModel'