簡體   English   中英

Watir網絡驅動程序花費太長時間從下拉菜單中獲取所選項目

[英]Watir web driver taking too long to get the selected item from drop down

我正在使用watir web驅動程序進行網頁抓取,我填寫表格並獲得結果。 結果還包括下拉列表,從中我必須提取當前選定的文本。 我使用了以下查詢。

selectedList = browser.select_list(:id => "itemType")

從這里我可以使用以下查詢:

selectedText = selectedList.selected_options.map(&:text)[0]

使用此查詢,我可以獲取所選文本。 但問題是,下拉列表包含數千個選項,並且使用此查詢時,watir需要很長時間才能找到所選選項。

任何更快的方法表示贊賞。 我也試過以下查詢:

selected = selectedList.selected_options()[0]
selectedText = selected.text

但問題是一樣的。 我有其他下拉菜單和較小的選項,其中這兩個查詢都表現良好,但有數千個選項,它真的很慢。

問題是,要獲取所選選項,將為每個選項調用瀏覽器。 即使每次調用只需要幾分之一秒,它也會很快累積起來。

您可以使用execute_script在單個有線調用中獲取所選選項:

selected_list  = browser.select_list(id: 'itemType')
selected_options = browser.execute_script("return arguments[0].selectedOptions;", selected_list)
selected_text = selected_options.map(&:text)

對於只有1000個選項選擇列表的頁面,這會將執行時間從64秒減少到僅0.2秒。

以上工作適用於下拉和多選。 如果你知道它是一個下拉列表(即單個選擇的選項),你只需返回文本(而不是選定的選項集合)就可以更快:

selected_list  = browser.select_list(id: 'itemType')
selected_text = browser.execute_script("return arguments[0].selectedOptions[0].text;", selected_list)

這將時間縮短到0.08秒。 但是,對於這么小的收益,我個人更喜歡第一種方法,因為它最小化了JavaScript代碼。

暫無
暫無

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

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