我在C#中使用Selenium Webdriver自动填充输入表单并使用SendKeys();。方法,但是填写输入表单需要花费很长时间。我想知道是否有一种方法可以一次填充所有输入表单,或者是否有比SendKeys()更快的一次填充它们的方法?方法。我本质上是想尽快填写表格。我将不胜感激。
我的代码示例:
//name
chromeDriver.FindElementByXPath("//*[@id='order_billing_name']").SendKeys("John Doe");
//email
chromeDriver.FindElementByXPath("//*[@id='order_email']").SendKeys("Johndoe@gmail.com");
//telephone
chromeDriver.FindElementByXPath("//*[@id='order_tel']").SendKeys("123-456-7890");
答案 0 :(得分:2)
如果您只是在网上抓取数据,则可以执行javascript来做到这一点,并且它在理论上应该是最快的。这样的事情应该起作用。
JavascriptExecutor js = (JavascriptExecutor)chromeDriver;
js.executeScript(@"document.getElementById('order_billing_name').value = 'John Doe';");
如果您实际使用它进行测试,则可以使用“ find_element_by_id”调用代替使用id的“ find_element_by_xpath”调用来节省一些时间。根据浏览器的不同,速度可能会快很多。所以这些都可以。
chromeDriver.FindElement(By.Id("order_billing_name")).SendKeys("John Doe");
chromeDriver.FindElementById("order_billing_name").SendKeys("John Doe");
答案 1 :(得分:0)
我猜您的屏幕上有太多元素。那会减慢搜索算法的速度。
您如何首先找到要发送密钥的字段的表单,然后在表单中搜索元素?这样,您将丢弃表单之外的所有其他元素,因此应提高性能。
类似这样的东西:
WebElement form = chromeDriver.FindElementById("my-form")
//name
form.FindElementByXPath("//*[@id='order_billing_name']").SendKeys("John Doe");
//email
form.FindElementByXPath("//*[@id='order_email']").SendKeys("Johndoe@gmail.com");
//telephone
form.FindElementByXPath("//*[@id='order_tel']").SendKeys("123-456-7890");
答案 2 :(得分:0)
kodingkuma告诉您,一种更快的使用JavaScriptExecutor的方法 但这也取决于webPage的结构。 我认为一个好的方法可能是: 在“ google”上搜索什么是找到WebElement的最快方法(使用“硒最快的方式查找元素”,您会找到很多示例)。
I.E。一些结果:
What is the fastest and slowest ways of finding elements using Selenium Webdriver?
Which is the Best and Fastest Way to Find Elements Using Selenium WebDriver
然后,构建一些不同的过程并测量需要加载的时间。
(我认为这是一种查找元素的好方法,它最初会检查您所需的元素是否在列表('ul'或'ol')中列出('li'),并在可能的情况下实例化一个list(Of IWebElements);然后循环其中的每个WebElement)
这里有个例子:
Dim jsExec As OpenQA.Selenium.IJavaScriptExecutor
jsExec = CType(driver, OpenQA.Selenium.IJavaScriptExecutor)
Dim sw As New Stopwatch
Dim MyListOfWebElements As System.Collections.ObjectModel.ReadOnlyCollection(Of IWebElement)
Public Sub Selenium_Load_WebElements_By_JsExecutor()
sw.Restart()
MyListOfWebElements = jsExec.ExecuteScript("var result = document.querySelector('...here you put your css selector...'); if(result === null) {} else {result = result.querySelectorAll('li')}; return result;")
sw.Stop()
MsgBox("WebElement List (jsExec-css) - Loading time (ms): " & sw.ElapsedMilliseconds)
End Sub
Public Sub Selenium_Load_WebElements_By_Css()
sw.Restart()
MyListOfWebElements = Driver.driver.FindElements(By.CssSelector("...your css selector...")).ToList
sw.Stop()
MsgBox("WebElement List (Css) - Loading time (ms): " & sw.ElapsedMilliseconds)
End Sub
Public Sub Selenium_Load_WebElements_By_Id()
sw.Restart()
MyListOfWebElements = Driver.driver.FindElements(By.Id("...your id...")).ToList
sw.Stop()
MsgBox("WebElement List (Id) - Loading time (ms): " & sw.ElapsedMilliseconds)
End Sub
P.S。请注意,要使用javaScriptExecutor,您需要在“ ...”之间使用Javascript语法。