【发布时间】:2019-05-24 00:15:38
【问题描述】:
我正在尝试弄清楚如何通过所有下拉菜单获取价格和变体名称。我可以通过名称属性来做到这一点,但不同的产品页面有不同的属性,所以这不是最佳做法。我使用 select by element id 完成了此代码,但收到以下错误。我也在试图弄清楚如何为此复制到 csv,但它似乎不起作用。
import csv
browser = webdriver.Chrome(executable_path='C:\Users\userman\PycharmProjects\seleniumTest\drivers\chromedriver.exe')
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from selenium.webdriver.support.select import Select
from selenium import webdriver
import csv
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.select import Select
from selenium.webdriver import Chrome
import itertools
from pprint import pformat
url = "https://www.ebay.co.uk/itm/Pashmina-Scarf-100-Viscose-Plain-Wrap-Shawl-Stole-Scarf-Many-Colours-Available/252342060680"
browser.get(url)
optionones = len(browser.find_elements_by_xpath("//select[@id='msku-sel-1']/option"))
for colNum in range(optionones):
#select color
optiononeEle = browser.find_element_by_xpath("(//select[id='msku-sel-1']/option)[" + str(colNum+1) + "]")
optionone = optiononeEle.text
optiononeEle.click()
# get the sizes
sizes = len(browser.find_elements_by_xpath("//select[id='msku-sel-2']/option"))
for sizeNum in range(sizes):
# select optionone
optiontwoEle = browser.find_element_by_xpath("(//select[id='msku-sel-2']/option)[" + str(sizeNum + 1) + "]")
size = optiontwoEle.text
optiontwoEle.click()
price = browser.find_element_by_xpath("//span[@id='prcIsum']").text
print ("optionone:" + optionone)
print( "optiontwoEle:" + optiontwoEle)
print("Price: "+ price)
print ("----------------------------------------")
Traceback (most recent call last):
File "C:/Users/userman/PycharmProjects/seleniumTest/test/test310.py", line 30, in <module>
optiononeEle = browser.find_element_by_xpath("(//select[id='msku-sel-1']/option)[" + str(colNum+1) + "]")
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
'value': value})['value']
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"(//select[id='msku-sel-1']/option)[1]"}
Process finished with exit code 1
预期输出是选项 1 的名称(例如尺寸,但可以是任何东西)+ 变体类型名称(例如小),然后是价格。
【问题讨论】:
-
您能否提供 3 个您感兴趣的不同产品网址,以便我们了解页面之间的差异?
-
ebay.co.uk/itm/…, ebay.co.uk/itm/… - 这里有 3 个 url 但 ebay 下拉列表不一致,我正在寻找通过 id -'msku-sel-1(2,3, 4) 因为这是一致的。
标签: python selenium selenium-webdriver web-scraping