Python、Selenium:错误地刮取数据

Python、Selenium:错误地刮取数据,python,python-3.x,selenium,xpath,web-scraping,Python,Python 3.x,Selenium,Xpath,Web Scraping,下面的代码硬输入制造商的零件号,HL4RPV-50最后,我想循环输入零件号列表并返回其信息 现在,我正在测试代码的一些输入,硬编码。当输入一个零件时,HL4RPV-50我得到一个干净的输出,没有错误 当我硬编码部件时,FSJ4-50B我得到一个错误 导入时间 #需要Selenium与web元素交互 从selenium导入webdriver 从selenium.webdriver.common.by导入 从selenium.webdriver.support.ui导入WebDriverWait 从

下面的代码硬输入制造商的零件号,
HL4RPV-50
最后,我想循环输入零件号列表并返回其信息

现在,我正在测试代码的一些输入,硬编码。当输入一个零件时,
HL4RPV-50
我得到一个干净的输出,没有错误

当我硬编码部件时,
FSJ4-50B
我得到一个
错误

导入时间
#需要Selenium与web元素交互
从selenium导入webdriver
从selenium.webdriver.common.by导入
从selenium.webdriver.support.ui导入WebDriverWait
从selenium.webdriver.support将预期的_条件导入为EC
#需要numpy/pandas与大型数据集交互
将numpy作为np导入
作为pd进口熊猫
进口itertools
chrome\u path=r“C:\Users\James\Documents\Python Scripts\jupyterNoteBooks\ScrapingData\chromedriver\u win32\chromedriver.exe”
driver=webdriver.Chrome(Chrome\u路径)
驱动程序。获取(“https://www.tessco.com/login")
userName=“FirstName。SurName321123@gmail.com"
password=“PasswordForThis123”
#设置等待,等待元素加载到DOM中
wait10=WebDriverWait(驱动程序,10)
wait20=WebDriverWait(驱动程序,20)
wait30=WebDriverWait(驱动程序,30)
elem=wait10.until(EC.element可点击((By.ID,“userID”))
元素发送密钥(用户名)
elem=wait10.until(EC.element可点击((By.ID,“密码”))
要素发送密钥(密码)
#按登录按钮
驱动程序。通过xpath(“html/body/account login/div/div[1]/form/div[6]/div/button”)查找元素。单击()
#展开搜索栏
searchIcon=wait10.until(EC.element可点击((By.XPATH,“/html/body/header/div[2]/div/div/ul/li[2]/i”))
搜索图标。单击()
searchBar=wait10.until(EC.element可点击((By.XPATH,'/html/body/header/div[3]/input'))
搜索栏。单击()
#通过Excel文件从组件集合加载制造零件号
#当我搜索HL4RPV-50时,返回的结果没有问题
#当我搜索FSJ4-50B时,找不到价格xpath
搜索栏。发送密钥(“HL4RPV-50”+“\n”)
#等待加载产品信息
products=wait30.until(EC.presence\u所有元素的位置((By.XPATH,//div[@class='CoveoResult']))
#创建一个字典来存储产品和价格
productInfo={}
#迭代搜索结果中的所有产品,并将详细信息添加到字典中
对于产品中的产品:
#获取产品信息,如OEM、说明和零件号
productDescr=product.find_element_by_xpath(“.//a[@class='productName CoveoResultLink HIDDED xs'])。text
mfgPart=product.find_element_by_xpath(“.//ul[@class='unlistedinfo']”)。text.split('\n')[3]
mfgName=产品。通过标签名称(“img”)查找元素。获取属性(“alt”)
#获得价格
price=product.find_element_by_xpath(“.//div[@class='price']”)。text.split('\n')[1]
印刷品(价格)
#向字典添加详细信息
productInfo[mfgPart、mfgName、productDescr]=价格
打印()
打印()
对于(制造零件、制造OEM、说明),productInfo.items()中的价格:
制造标识=制造零件分割(':')[1]
如果制造商id='HL4RPV-50':
打印(‘零件号:’,制造商id)
打印(“公司:”,制造商/原始设备制造商)
打印('说明:',说明)
打印('价格:',价格)
打印()
打印()
#时间。睡眠(5)
驱动程序关闭()
HL4RP-50的输出为:

$1.89
$1.89
$19.94
$39.26
$32.99
$33.33
$42.82
$20.30


Part #: HL4RPV-50
Company: CommScope
Description: 1/2" Plenum Air Cable, Off White
Price: $1.89
FSJ4-50B的输出为:

$85.68
$2.78
$115.51

---------------------------------------------------------------------------
NoSuchElementException                    Traceback (most recent call last)
<ipython-input-112-92a2ced2ae46> in <module>
     59 
     60     # get price
---> 61     price = product.find_element_by_xpath(".//div[@class='price']").text.split('\n')[1]
     62     print(price)
     63 
85.68美元
$2.78
$115.51
---------------------------------------------------------------------------
NoSuchElementException回溯(最近一次调用最后一次)
在里面
59
60#获得价格
--->61 price=product.find_element_by_xpath(“.//div[@class='price']”)。text.split('\n')[1]
62印刷品(价格)
63

为什么我在搜索其他零件时出错?我检查了XPATH,它们是相同的

在产品循环开始后,您是否手动输入
FSJ4-50B
?当我试图确定您提出的建议时,我缩进了产品循环中产品的
,并能够返回正确的定价。不过,它确实两次重新运行了结果。但我确实收到了另一个错误消息。这一个
NoSuchElementException
用于
price=product.find_element\u by_xpath(“.//div[@class='price']”)。text.split('\n')[1]
作为更新,当我在products
行缩进产品的
时,
HL4RPV-50
的输出打印8次,即搜索返回的产品数量。当输入
FSJ4-50B
时,代码打印正确的定价,但在打印3次后会出现问题。希望这是的副本。如果不让我知道,我可以看看这个。是的!!是的,我只是作为另一个线程的一部分登录来更新它。我能够找到XPATH的一个问题。我还认为
[1]
正在强制
price
返回它找到的第一个值,而不是数组中的第二个项。在产品循环开始后,您是否手动输入
FSJ4-50B
,我在products
循环中缩进了产品的
,并能够返回正确的定价。不过,它确实两次重新运行了结果。但我确实收到了另一个错误消息。这一个
NoSuchElementException
用于
price=product.find_element\u by_xpath(“.//div[@class='price']”)。text.split('\n')[1]
作为更新,当我在products
行缩进产品的
时,
HL4RPV-50
的输出打印8次,即搜索返回的产品数量。当输入
FSJ4-50B
时,代码会打印正确的定价,但会在打印3次后失效。希望