下面的代码单击一个字段,将其填充为现代,然后按Enter,这将关闭下拉菜单。但是它永远不会,因此不会继续填写下一个字段。
到目前为止,我尝试告诉它单击任何位置以关闭下拉菜单-无效。 尝试在send_keys()之后添加.submit()和.click()-不起作用。
期望的结果:让我填写下一个字段。
编辑:每次重新加载时,我注意到要选择更改的字段的ID。有办法解决吗?
在这里被卡住了:
第二条评论:我输入了多个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之间跳下来。
答案 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'