Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python I';在使用xpath选择元素后,我们得到了IndexError:list索引超出范围_Python_Xpath_Webdriver - Fatal编程技术网

Python I';在使用xpath选择元素后,我们得到了IndexError:list索引超出范围

Python I';在使用xpath选择元素后,我们得到了IndexError:list索引超出范围,python,xpath,webdriver,Python,Xpath,Webdriver,我使用xpath和web驱动程序为两个不同的链接制作了一个python程序。我想得到2个ID的价格。这个程序从两个不同的页面运行,这就是为什么price有两个ID。我曾经尝试过,但它不起作用。我附上了密码。 现在我得到索引器:列表索引超出范围。我将感谢任何帮助。如果你想问我任何问题 从selenium导入webdriver 导入csv #设置代理以隐藏实际IP 代理={ 'http':'http://218.50.2.102:8080', “https”:”http://185.93.3.12

我使用xpath和web驱动程序为两个不同的链接制作了一个python程序。我想得到2个ID的价格。这个程序从两个不同的页面运行,这就是为什么price有两个ID。我曾经尝试过,但它不起作用。我附上了密码。 现在我得到索引器:列表索引超出范围。我将感谢任何帮助。如果你想问我任何问题

从selenium导入webdriver
导入csv
#设置代理以隐藏实际IP
代理={
'http':'http://218.50.2.102:8080',
“https”:”http://185.93.3.123:8080',
}
chrome\u options=webdriver.ChromeOptions()
chrome\u选项。添加\u参数('--proxy server=%s'%proxy)
driver=webdriver.Chrome(可执行文件\u path=“C:\\Users\Andrei\Downloads\chromedriver\u win32\chromedriver.exe”,
chrome\u选项=chrome\u选项)
标题=['产品标题','产品价格']
以open('csv/products.csv',“w”)作为输出:
writer=csv.writer(输出)
writer.writerow(标题)
链接=['https://www.amazon.com/Windsor-Glider-Ottoman-White-Cushion/dp/B017XRDV5S/ref=sr_1_1?s=home-garden&ie=UTF8&qid=1520265105&sr=1-1&keywords=-gggg&th=1',
'https://www.amazon.com/Instant-Pot-Multi-Use-Programmable-Packaging/dp/B00FLYWNYQ/ref=sr_1_1?s=home-garden&ie=UTF8&qid=1520264922&sr=1-1&keywords=-gggh']
对于范围内的i(len(links)):
获取驱动程序(链接[i])
product_title=driver。通过xpath('/*[@id=“productTitle”][1]'查找元素
产品标题=[x.text代表产品标题中的x]
尝试:
product\u price=driver。通过xpath('/*[@id=“priceblock\u ourprice”][1]'查找\u元素
产品价格=[x.产品价格中x的文本]
除:
打印('无价格v1')
尝试:
product_price=driver。通过_xpath('/*[@id=“_price”][1]”查找_元素
产品价格=[x.产品价格中x的文本]
除:
打印('无价格v2')
csvfile='csv/products.csv'
数据=[产品名称[0],产品价格[0]]
以open(csvfile,“a”,newline=“”)作为输出:
writer=csv.writer(输出)

writer.writerow(数据)
正常。我想我解决了你的问题

您正在使用
find\u elements\u by\u xpath
搜索元素列表。在这种情况下,selenium不会在找不到任何内容时抛出异常。它返回一个空列表。所以
prod\u price=[x.text for x in product\u price]
赋值在两个try..except子句中都有效。最终你可能会得到一个空的产品价格

您需要检查产品价格是否为空,然后才搜索替代xpath

prod_price = [x.text for x in product_price]
if not prod_price:
    print('no price v')
    product_price = driver.find_elements_by_xpath(......
或者使用引发异常的
find\u element\u by\u xpath
,使用xpath进行单元素搜索

try:
    product_price = driver.find_element_by_xpath('(//*[@id="priceblock_ourprice"])[1]')
    prod_price = product_price.text
except:
.........
p.S.您可以使用pythonic方法通过一个iterable进行迭代

for link in links:
    driver.get(links)

嗯。我想我解决了你的问题

您正在使用
find\u elements\u by\u xpath
搜索元素列表。在这种情况下,selenium不会在找不到任何内容时抛出异常。它返回一个空列表。所以
prod\u price=[x.text for x in product\u price]
赋值在两个try..except子句中都有效。最终你可能会得到一个空的产品价格

您需要检查产品价格是否为空,然后才搜索替代xpath

prod_price = [x.text for x in product_price]
if not prod_price:
    print('no price v')
    product_price = driver.find_elements_by_xpath(......
或者使用引发异常的
find\u element\u by\u xpath
,使用xpath进行单元素搜索

try:
    product_price = driver.find_element_by_xpath('(//*[@id="priceblock_ourprice"])[1]')
    prod_price = product_price.text
except:
.........
p.S.您可以使用pythonic方法通过一个iterable进行迭代

for link in links:
    driver.get(links)

只要运行代码,您就会看到我的意思:考虑搜索您感兴趣的特定标记:
prod\u price=driver。通过xpath('//span[@id='priceblock\u ourprice'])查找元素。text
我使用了prod\u price=driver。通过xpath('//span[@id='priceblock\u ourprice'])查找元素.text和我的索引器相同:列表索引超出范围。您可以运行程序查看吗?我如何使用driver.find_element_by_xpath作为第二个链接?请改进您的代码,然后您将看到我的意思考虑搜索您感兴趣的特定标记:
prod_price=driver.find_element_by_xpath('//span[@id='priceblock\u ourprice']).text
我使用了prod_price=driver。通过xpath('//span[@id=“priceblock\u ourprice”]')查找元素。text和我得到了相同的索引器:列表索引超出范围。你能运行这个程序看看吗?我如何使用driver.find\u element\u by\u xpath作为第二个链接?不客气。我添加了PS,关于在列表中循环。不客气。我添加了PS,关于在列表中循环。