Python:硒s

2024-10-03 13:28:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个网站,你可以用<select><option>选择不同价格的货币,如下所示:

<div class="menu" style="display: none;">
        <p class="current-country">
            <span class="flag store-7"></span>
            Italia
        </p>
        <div class="currency-list">
            <label for="currencyList">Cambia valuta:</label>
            <select name="currency-list" id="currencyList" data-bind="valueFromOptions: currencies, value: selectedCurrencyId">
                        <option value="1" data-label="GBP">£ GBP</option>
                        <option value="2" data-label="USD">$ USD</option>
                        <option value="3" data-label="CAD">C$ CAD</option>
                        <option value="8" data-label="SEK">kr SEK</option>
                        <option value="9" data-label="NOK">kr NOK</option>
                        <option value="10" data-label="DKK">kr DKK</option>
                        <option value="14" data-label="CHF">₣ CHF</option>
                        <option value="19" data-label="EUR"> € EUR</option>
                        <option value="21" data-label="AUD">$ AUD</option>
                        <option value="10021" data-label="RMB">¥ RMB</option>
                        <option value="10042" data-label="HKD">$ HKD</option>
                        <option value="10064" data-label="NZD">$ NZD</option>
                        <option value="10078" data-label="SGD">$ SGD</option>
                        <option value="10085" data-label="TWD">NT$ TWD</option>
                        <option value="10123" data-label="RUB">руб.  RUB</option>
            </select>
        </div>
    </div>

我想在可用选项和每次打印商品价格之间进行迭代,但是,在这个网站中,每次您更改货币时,它都会重新加载页面,因此代码不适用于我,下面是我的代码:

^{pr2}$

我得到一个错误:

Traceback (most recent call last):
  File "C:/Users/dodob/PycharmProjects/Learning/Asosly.py", line 17, in <module>
    print(elem.get_attribute('innerHTML'), root_url[i] + str(num), option.get_attribute('innerHTML'))
  File "C:\Users\dodob\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 111, in get_attribute
    resp = self._execute(Command.GET_ELEMENT_ATTRIBUTE, {'name': name})
  File "C:\Users\dodob\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 461, in _execute
    return self._parent.execute(command, params)
  File "C:\Users\dodob\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
    self.error_handler.check_response(response)
  File "C:\Users\dodob\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: Element not found in the cache - perhaps the page has changed since it was looked up
Stacktrace:
    at fxdriver.cache.getElementAt (resource://fxdriver/modules/web-element-cache.js:9454)
    at Utils.getElementAt (file:///C:/Users/dodob/AppData/Local/Temp/tmpb9cwfwq1/extensions/fxdriver@googlecode.com/components/command-processor.js:9039)
    at WebElement.getElementAttribute (file:///C:/Users/dodob/AppData/Local/Temp/tmpb9cwfwq1/extensions/fxdriver@googlecode.com/components/command-processor.js:12146)
    at DelayedCommand.prototype.executeInternal_/h (file:///C:/Users/dodob/AppData/Local/Temp/tmpb9cwfwq1/extensions/fxdriver@googlecode.com/components/command-processor.js:12661)
    at DelayedCommand.prototype.executeInternal_ (file:///C:/Users/dodob/AppData/Local/Temp/tmpb9cwfwq1/extensions/fxdriver@googlecode.com/components/command-processor.js:12666)
    at DelayedCommand.prototype.execute/< (file:///C:/Users/dodob/AppData/Local/Temp/tmpb9cwfwq1/extensions/fxdriver@googlecode.com/components/command-processor.js:12608)

我很抱歉我的英语,但无论如何,我能做些什么等到页面重新加载,因为我认为这会造成问题。在

如果需要的话,我试着从ASOS获取一些信息,例如linkhere


Tags: indatavaluelocaljsusersappdatalabel
1条回答
网友
1楼 · 发布于 2024-10-03 13:28:02
# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException


driver = webdriver.Chrome(\Path to chrome driver\)
driver.maximize_window()
baseurl = "http://www.asos.com/it/asos/asos-jeans-skinny-alla-caviglia-kaki/prd/6759361"
driver.get(baseurl)



def Getprice():
    selected_currency = driver.find_element(By.CSS_SELECTOR,".selected-currency")
    currentprice = driver.find_element(By.CSS_SELECTOR,".current-price")
    print "The price for selected current currency " + selected_currency.text + " is " +currentprice.text

def Setcurrency(text):
    one = driver.find_element(By.CLASS_NAME, "selected-currency")
    one.click()
    currentselection = driver.find_element_by_id("currencyList")
    select = Select(currentselection)
    select.select_by_visible_text(text)

def getallcurrencies():

    one = driver.find_element(By.CLASS_NAME, "selected-currency")
    one.click()
    el = driver.find_element_by_id("currencyList")
    currency =[]
    for option in el.find_elements_by_tag_name('option'):
        currency.append((option.text).encode('utf8'))
    return currency

list_of_currencies = getallcurrencies()
for currency in list_of_currencies:
    currentvalue= currency.decode('utf8')
    try:
        Setcurrency(currentvalue)
        time.sleep(2)
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR,".current-price"))
        WebDriverWait(driver, 10).until(element_present)
        Getprice()
    except TimeoutException:
        print "Timed out waiting for page to load"

此程序将首先获取所有可用货币,然后打印所有价格:

^{pr2}$

希望这对解决你的问题有帮助

相关问题 更多 >