Python和Selenium Web抓取eBay下拉框文本

时间:2019-05-22 21:31:51

标签: python selenium selenium-webdriver web-scraping drop-down-menu

我正在尝试在eBay上输出下拉菜单的文本。我要输出文本,然后选择不同的下拉选项来选择价格(这就是为什么我不想一次全部刮取下拉值列表的原因)。我有一个仅适用于1个下拉框和价格的代码。我希望它可以与2个下拉菜单+一起使用。

from selenium import webdriver
import csv
browser = webdriver.Chrome(executable_path='C:\Users\user\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

browser.get('https://www.ebay.co.uk/itm/Wooden-Box-Coins-Coin-Capsules-Display-Storage-Case-for-Collectible-50-100-New/392274824564')
from selenium.webdriver.support.select import Select

sel = Select(browser.find_element_by_xpath("//select[@id='msku-sel-1']"))

for index in range(1, len(sel.options)):
    # skipping index 0 because it is not valid option
    sel.select_by_index(index)
    print("{}: {}".format(sel.first_selected_option.text, browser.find_element_by_xpath("//span[@id='prcIsum']").text))

输出=

S: £6.35
L: £10.25

from selenium import webdriver
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




browser.get('https://www.ebay.co.uk/itm/Men-3D-Print-Summer-Short-Sleeve-Casual-Slim-Fit-T-Shirts-Graphic-Tee-Shirt-Tops/312545780841?_trkparms=aid%3D333200%26algo%3DCOMP.MBE%26ao%3D1%26asc%3D20171012094517%26meid%3D5e2ad1383afb40b6ad90bb05a8161ad3%26pid%3D100008%26rk%3D2%26rkt%3D12%26sd%3D183776732599%26itm%3D312545780841&_trksid=p2047675.c100008.m2219')

sel = Select(browser.find_element_by_xpath("//select[@id='msku-sel-1']"))
selx = Select(browser.find_element_by_xpath("//select[@id='msku-sel-2']"))

for index in range(1, len(sel.options)):
    # skipping index 0 because it is not valid option
    sel.select_by_index(index)
    print("{}: {}".format(sel.first_selected_option.text, browser.find_element_by_xpath("//span[@id='prcIsum']").text))


for index in range(1, len(selx.options)):
    # skipping index 0 because it is not valid option
    selx.select_by_index(index) & sel.select_by_index(index)

    print("{}: {}".format(selx.first_selected_option.text, browser.find_element_by_xpath("//span[@id='prcIsum']").text),browser.find_element_by_xpath("//select[@id='msku-sel-2']").text)


Traceback (most recent call last):
  File "C:/Users/userman/PycharmProjects/seleniumTest/test/test310.py", line 27, in <module>
    selx.select_by_index(index) & sel.select_by_index(index)
TypeError: unsupported operand type(s) for &: 'NoneType' and 'NoneType'

https://www.ebay.co.uk/itm/UK-Women-Off-Shoulder-Floral-Bodycon-Backless-Ladies-Summer-Beach-Midi-Sun-Dress/254198776097?hash=item3b2f6d8121:m:m9B15WsfVx5zTh_73LlzBGA 我希望输出为例如颜色:红色,尺寸:S价格:£24.99

2 个答案:

答案 0 :(得分:0)

这是将打印所需输出的逻辑。

url = "https://www.ebay.co.uk/itm/UK-Women-Off-Shoulder-Floral-Bodycon-Backless-Ladies-Summer-Beach-Midi-Sun-Dress/254198776097?hash=item3b2f6d8121:m:m9B15WsfVx5zTh_73LlzBGA"
driver.get(url)
colors = len(driver.find_elements_by_xpath("//select[@name='Colour']/option"))
for colNum in range(colors):
    #select color
    colorEle = driver.find_element_by_xpath("(//select[@name='Colour']/option)[" + str(colNum+1) + "]")
    color = colorEle.text
    colorEle.click()

    # get the sizes
    sizes = len(driver.find_elements_by_xpath("//select[@name='Size']/option"))
    for sizeNum in range(sizes):
        # select color
        sizeEle = driver.find_element_by_xpath("(//select[@name='Size']/option)[" + str(sizeNum + 1) + "]")
        size = sizeEle.text
        sizeEle.click()
        price = driver.find_element_by_xpath("//span[@id='prcIsum']").text
        print ("Color:" + color)
        print( "size:" + size)
        print("Price: "+ price)
        print ("----------------------------------------")

以下是输出:

颜色:-选择- 大小:-选择-

价格:£6.99

颜色:-选择- 大小:6

价格:£6.99

颜色:-选择- 大小:8

价格:£6.99

颜色:-选择- 大小:10

价格:£6.99

颜色:-选择- 大小:12

价格:£6.99

颜色:-选择- 大小:14

价格:£6.99

颜色:-选择- 大小:16

价格:£6.99

颜色:-选择- 大小:S

价格:£6.99

颜色:-选择- 尺寸:M

价格:£6.99

颜色:-选择- 大小:L

价格:£6.99

颜色:-选择- 尺寸:XL

价格:£6.99

颜色:白色 大小:-选择-

价格:£6.99

颜色:白色 大小:6

价格:£6.99

颜色:白色 大小:8

价格:£6.99

颜色:白色 大小:10

价格:£6.99

颜色:白色 大小:12

价格:£6.99

颜色:白色 大小:14

价格:£6.99

颜色:白色 大小:16

价格:£6.99

颜色:白色 大小:S

价格:£6.99

颜色:白色 尺寸:M

价格:£6.99

颜色:白色 大小:L

价格:£6.99

颜色:白色 尺寸:XL

价格:£6.99

颜色:蓝色 大小:-选择-

价格:£6.99

颜色:蓝色 大小:6

价格:£6.99

颜色:蓝色 大小:8

价格:£6.99

颜色:蓝色 大小:10

价格:£6.99

颜色:蓝色 大小:12

价格:£6.99

颜色:蓝色 大小:14

价格:£6.99

颜色:蓝色 大小:16

价格:£6.99

颜色:蓝色 大小:S

价格:£6.99

颜色:蓝色 尺寸:M

价格:£6.99

颜色:蓝色 大小:L

价格:£6.99

颜色:蓝色 尺寸:XL

价格:£6.99

颜色:浅绿色 大小:-选择-

价格:£6.99

颜色:浅绿色 大小:6

价格:£6.99

颜色:浅绿色 大小:8

价格:£6.99

颜色:浅绿色 大小:10

价格:£6.99

颜色:浅绿色 大小:12

价格:£6.99

颜色:浅绿色 大小:14

价格:£6.99

颜色:浅绿色 大小:16

价格:£6.99

颜色:浅绿色 大小:S

价格:£6.99

颜色:浅绿色 尺寸:M

价格:£6.99

颜色:浅绿色 大小:L

价格:£6.99

颜色:浅绿色 尺寸:XL

价格:£6.99

答案 1 :(得分:0)

@cod eisfun1234,您可以如下使用options

for sel_opt,selx_opt in zip(sel.options,selx.options):
     if "Select" not in sel_opt.text:
         print("{}, {}: {}".format(sel_opt.text,selx_opt.text, browser.find_element_by_xpath("//span[@id='prcIsum']").text))

以下是输出:

# 1 Lion, M: £7.49
# 2 Lion, L: £7.49
# 3 Lion, XL: £7.49
Wolf, XXL: £7.49
Deer, XXXL: £7.49

希望这会有所帮助!