我有一个网站,其中有一些不同的价格货币,您可以在<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>
我想在可用选项之间进行迭代,每次打印项目的价格,但是,在这个网站上,每次更改货币时它会重新加载页面,所以代码对我不起作用,这是我的代码:
driver.get(root_url[i] + str(num)) # open the page
el = driver.find_element_by_name('currency-list') # find the <select>
for option in el.find_elements_by_tag_name('option'): # for options inside
div = driver.find_element_by_class_name('menu')
driver.execute_script("document.getElementsByClassName('menu')[0].style.display = 'block';") # make the div containing the <select> visible
option.click()
elem = driver.find_element_by_class_name('current-price') # find the price element and print it
print(elem.get_attribute('innerHTML'), root_url[i] + str(num), option.get_attribute('innerHTML'))
driver.close()
我收到错误:
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获取一些信息,例如链接here
答案 0 :(得分:1)
# -*- 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"
此计划将首先获得所有可用的货币&amp;然后打印所有价格:
The price for selected current currency £ GBP is £ 25,49
The price for selected current currency $ USD is $ 41,10
The price for selected current currency C$ CAD is C$ 50,85
The price for selected current currency kr SEK is SEK 318,66
The price for selected current currency kr NOK is NOK 326,83
The price for selected current currency kr DKK is DKK 254,93
The price for selected current currency ₣ CHF is CHF 38,95
The price for selected current currency € EUR is € 33,99
The price for selected current currency $ AUD is $ 54,94
The price for selected current currency ¥ RMB is ¥ 245,12
The price for selected current currency $ HKD is HKD$ 310,89
The price for selected current currency $ NZD is NZD$ 62,13
The price for selected current currency $ SGD is SGD$ 55,41
The price for selected current currency NT$ TWD is NT$ 1.274,65
The price for selected current currency руб. RUB is руб. 2.338,81
希望这有助于解决您的问题