簡體   English   中英

硒:sendKeys()

[英]Selenium: sendKeys()

我嘗試使用Java + Selenium來自動登錄到我的Gmail帳戶,但是每次我被Google阻止時。 當我手動登錄(即使在同一台服務器上)時,也沒有這樣的問題。 此外,如果我使用“ sendKeys”類型的lib( https://pypi.python.org/pypi/SendKeys/0.3 ),則不會出現此類問題。

我的問題有兩個:

  1. Selenium如何“發送密鑰”與普通用戶之間的技術區別是什么? 還是Python庫如何?

  2. 有沒有辦法修改硒,使其模仿真實用戶? 還是有另一個庫可以代替Selenium來模仿真實用戶?

謝謝

實際上是速度的差異。 人類打字緩慢,腳本書寫很快。 因此,您必須降低腳本速度。 因此,總的來說,您必須構建更好的機器人。 更好的機器人不會被任何服務器檢測到。

您應該在代碼中包含一些延遲,以欺騙Google您的代碼是真正的人類-就是這樣:) Thread.sleep可能是這里最簡單的解決方案。

打開gmail&登錄並打開最新收到的郵件

DriverObj.get("http://www.gmail.com");
                DriverObj.findElement(By.id("gmail-sign-in")).click();
                DriverObj.findElement(By.id("Email")).sendKeys("youremailID");
                DriverObj.findElement(By.id("next")).click();
                DriverObj.findElement(By.id("Passwd")).sendKeys("yourpassword");
                DriverObj.findElement(By.id("signIn")).click();
                Thread.sleep(2000);
            WebElement tableelement=DriverObj.findElement(By.xpath("//div[@class='Cp']/div/table//tbody"));
            java.util.List<WebElement> tableelement1=tableelement.findElements(By.xpath("//div[@class='Cp']/div/table//tbody/tr"));
            int tableelementsize=tableelement1.size();
            int i;
            if(tableelementsize>0){
                //DriverObj.navigate().refresh();
                for(i=0;i<tableelementsize;i++){
                    DriverObj.findElement(By.xpath("//div[@class='Cp']/div/table//tbody/tr/td[6]")).click();
                }

            }else {
                 if(tableelementsize==0){
                    DriverObj.navigate().refresh();
                    for(i=0;i<tableelementsize;i++){
                        DriverObj.findElement(By.xpath("//div[@class='Cp']/div/table//tbody/tr/td[6]")).click();
                    }
                }

郵箱的路徑可能已更改(您需要根據自己的工作進行更改)

第一個問題的答案:Sendkeys()方法是指用戶輸入網頁上的特定文本框,因為我們也可以使用javascriptExecuter進行相同的操作。

回答第二個問題:據我所知,不是。 但是我不太確定。

在Java中,使用以下代碼登錄Gmail。

但是我可以說,單擊登錄按鈕后,“收件箱”頁面需要花費一些時間才能加載(最多約10秒)

因此,如果您在沒有其他等待(隱式或顯式)的情況下搜索另一個元素,那么它將拋出錯誤。

driver.get(“ http://www.gmail.com/ ”);

driver.findElement(By.id( “電子郵件”))的SendKeys( “username” 的)。

。driver.findElement(By.id( “下一步”))點擊();

driver.findElement(By.id( “的passwd”))的SendKeys( “密碼”)。

。driver.findElement(By.id( “簽到”))點擊();

然后,您可以使用Thread.sleep(10000)或編寫任何等待方法來使驅動程序等待下一個對象可見,則可以使用該對象。

絕對地,Selenium僅提供了編寫自動測試腳本的庫。 如果您想扮演人類。 然后,您應該在測試步驟之間的整個腳本中添加一些wait語句。 除非您沒有在腳本中添加任何等待,否則它的行為就像是自動測試。 如果您以自動化測試工具為例,該工具不會為自動化測試添加任何額外的信息/動作。這就是自動化測試的意思……不是自動化測試。 這只是由機器完成的計算機輔助測試。 希望上面的例子能使您更加清楚。

另一種解決方案是,第一次嘗試發送錯誤的電子郵件,出現錯誤消息后,您可以應用正確的電子郵件,這是人為的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM