第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Selenium:陳舊元素參考(調(diào)試時工作正常)

Selenium:陳舊元素參考(調(diào)試時工作正常)

C#
森林海 2021-04-30 15:08:49
我正在嘗試使用C#中的Selenium刮取一個頁面,通過單擊頁面上的“下一步”按鈕可以瀏覽多個頁面。我通常會得到一個錯誤的消息,即有一個過時的元素引用,只有當我在沒有斷點的情況下運行它時,該引用才會發(fā)生。如果我逐步執(zhí)行該程序,則效果很好。我假設Selenium無需等待就跳過了重要的內(nèi)容(即使我實現(xiàn)了wait方法)。對于代碼,這是問題的主要邏輯:foundVacancies.AddRange(FindVacanciesOnPage());const string nextBtnXPath = "//*[@id=\"ContainerResultList\"]/div/div[3]/nav/ul/li[8]/a";if (Driver.FindElements(By.XPath(nextBtnXPath)).Count != 0){    while (TryClickingNextButton(nextBtnXPath))    {        foundVacancies.AddRange(FindVacanciesOnPage());    }}此方法首先獲取首頁上的所有項目,并將它們添加到foundVacancies列表中。之后,它將嘗試尋找“下一步”按鈕,如果沒有足夠的項目,該按鈕將不會一直存在。如果是這樣,它將嘗試單擊它,刮取頁面,然后再次單擊它,直到?jīng)]有剩余的頁面。這在調(diào)試時效果很好,但是正常運行時有一些錯誤。獲取頁面上所有項目以及發(fā)生錯誤的位置的方法:private IEnumerable<string> FindVacanciesOnPage(){    var vacancies = new List<string>();    var tableContainingAllVacancies = Driver.FindElement(By.XPath("//*[@id=\"ContainerResultList\"]/div/div[2]/div/ul"));    var listOfVacancies = tableContainingAllVacancies.FindElements(By.XPath(".//li/article/div[1]/a"));    foreach (var vacancy in listOfVacancies)    {        vacancies.Add(vacancy.FindElement(By.XPath(".//h2")).Text);    }    return vacancies;}這些項目在<ul>HTML標記中,并且有一個<li>孩子,我將逐個檢查這些孩子,并獲取其內(nèi)部文本。過時的元素錯誤發(fā)生在foreach循環(huán)中。我假設Web驅(qū)動程序沒有時間重新加載DOM,因為它在斷點時可以正常工作。但是,我確實有一種方法可以等待頁面完全加載,這就是我進入下一頁時所使用的方法。private bool TryClickingNextButton(string nextButtonXPath){    var nextButton = Driver.FindElement(By.XPath(nextButtonXPath));    var currentUrl = Driver.Url;    ScrollElementIntoView(nextButton);    nextButton.Click();    WaitUntilLoaded();    var newUrl = Driver.Url;    return !currentUrl.Equals(newUrl);}我正在比較新舊URL,以確定這是否是最后一頁。該WaitUntilLoaded方法如下所示:var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(30));wait.Until(x => ((IJavaScriptExecutor) Driver).ExecuteScript("return document.readyState").Equals("complete"));奇怪的是,有時Web驅(qū)動程序僅在加載第一頁后立即關閉,而沒有任何錯誤或任何結(jié)果。我花了很多時間在SO上進行調(diào)試和搜索,但似乎找不到任何信息,因為在進行斷點處理時,代碼工作得很好。我僅在有無無頭模式的情況下嘗試使用Chrome,但我認為這可能不是Chrome的問題。我不知道data-jn-click是什么。我試圖只執(zhí)行JavaScript nextPage();,但是什么也沒做。
查看完整描述

3 回答

?
楊魅力

TA貢獻1811條經(jīng)驗 獲得超6個贊

我沒有使用C#的經(jīng)驗,所以如果有錯,請不要介意。您正在使用findElements并將其存儲到var listOfVacancies。我已經(jīng)介紹了一些網(wǎng)站。你為什么不使用ReadOnlyCollection<IWebElement>。最好將所有元素存儲為List并對其進行遍歷。所以代碼變成了

ReadOnlyCollection<IWebElement> listOfVacancies = tableContainingAllVacancies.FindElements(By.XPath(".//li/article/div[1]/a"));


查看完整回答
反對 回復 2021-05-08
  • 3 回答
  • 0 關注
  • 195 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號