簡體   English   中英

如何從具有特殊設置的網站上使用Selenium從下拉列表中選擇一個值-Python

[英]How to select a value from a drop-down using Selenium from a website with special setting- Python

注意:我特別處理這個網站

如何將Selenium與Python結合使用以獲取此頁面上的評論,以“最新”排序?

我試過的是:

driver.find_element_by_id('sort-order-dropdown').send_keys('Most recent') 

由此並沒有引起任何錯誤,但是沒有起作用。

然后我嘗試

from selenium.webdriver.support.ui import Select

select = Select(driver.find_element_by_id('sort-order-dropdown'))
select.select_by_value('recent')
select.select_by_visible_text('Most recent')
select.select_by_index(1)

我得到: Message: Element <select id="sort-order-dropdown" class="a-native-dropdown" name=""> is not clickable at point (66.18333435058594,843.7999877929688) because another element <span class="a-dropdown-prompt"> obscures it

這個

element = driver.find_element_by_id('sort-order-dropdown')
element.click()
li = driver.find_elements_by_css_selector('#sort-order-dropdown > option:nth-child(2)')
li.click()

從這引起了同樣的錯誤味精

由此引起的同樣錯誤

Select(driver.find_element_by_id('sort-order-dropdown')).select_by_value('recent').click()

因此,我很想知道我是否可以選擇從最新的評論開始排序的評論。

謝謝

使用Java對我有用:

@Test
public void amazonTest() throws InterruptedException {
    String URL = "https://www.amazon.com/Harry-Potter-Slytherin-Wall-Banner/product-reviews/B01GVT5KR6/ref=cm_cr_dp_d_show_all_top?ie=UTF8&reviewerType=all_reviews";
    String menuSelector = ".a-dropdown-prompt";
    String menuItemSelector = ".a-dropdown-common .a-dropdown-item";

    driver.get(URL);

    Thread.sleep(2000);

    WebElement menu = driver.findElement(By.cssSelector(menuSelector));
    menu.click();

    List<WebElement> menuItem = driver.findElements(By.cssSelector(menuItemSelector));
    menuItem.get(1).click();
}

您可以重用元素名稱,並使用Python遵循相似的路徑。

這里的關鍵點是:

  1. 點擊菜單本身
  2. 單擊第二個菜單項

更好的做法是不對項目編號進行硬編碼,而是實際讀取項目名稱並選擇正確的名稱,以便即使菜單更改也可以使用。 這只是未來改進的注意事項。

編輯這是可以在Python中完成的方法。

import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

URL = "https://www.amazon.com/Harry-Potter-Slytherin-Wall-Banner/product-reviews/B01GVT5KR6/ref=cm_cr_dp_d_show_all_top?ie=UTF8&reviewerType=all_reviews";
menuSelector = ".a-dropdown-prompt";
menuItemSelector = ".a-dropdown-common .a-dropdown-item";

driver = webdriver.Chrome()
driver.get(URL)

elem = driver.find_element_by_css_selector(menuSelector)
elem.click()

time.sleep(1)
elemItems = []
elemItems = driver.find_elements_by_css_selector(menuItemSelector)
elemItems[1].click()

time.sleep(5)
driver.close()

請記住,css選擇器是xpath的更好替代方案,因為它們更快,更健壯並且更易於讀取和更改。

這是我所做的簡化版本,以使評論從最新的評論中整理出來。 正如上面的“ Eugene S”所說,關鍵是單擊按鈕本身,然后從列表中選擇/單擊所需的項目。 但是,我的Python代碼使用XPath而不是選擇器。

# click on "Top rated" button
driver.find_element_by_xpath('//*[@id="a-autoid-4-announce"]').click() 
# this one select the "Most recent"
driver.find_element_by_xpath('//*[@id="sort-order-dropdown_1"]').click() 

暫無
暫無

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

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