【发布时间】:2021-08-02 06:32:45
【问题描述】:
这是一个示例 Digikey 网站:https://www.digikey.com/en/products/detail/panasonic-electronic-components/ERJ-8ENF2211V/88928?s=N4IgTCBcDaIKICUBSBaAHHAcgMTGAjPgGogC6AvkA
我正在尝试从上述网站读取库存可用性数据,在这种情况下,在发布时为 42,107。我在下面包含了我的代码的 sn-p。那里有一些我正在使用的额外调试行,而且我是一个完全的 python 菜鸟,所以放轻松:)。
“ENTER MPN”部分运行良好,可以将我带到上面提供的链接。我在早期添加了“等待加载”部分作为预防措施,以确保加载内容并且我可以直观地看到我试图捕获的数据。
当我尝试阅读库存可用性时,我收到一条错误消息,指出该元素不存在。我直接从检查表示库存数量的行中获取 Xpath,所以我相当确定这是正确的。另一个有趣的事情是,我能够在顶部的“产品属性”或“摘要”部分中搜索并找到所有元素。我只是找不到“价格和采购”部分中包含的任何元素。从一些阅读中,我认为这可能是一个 iFrame 问题,我需要切换到正确的框架,但我也尝试循环浏览所有找到的 iFrame 并进行读取,但也没有任何效果。
很高兴尝试一些想法!
# Enter MPN
search_box_xpath = '//html/body/header/div[2]/div[1]/div/div[2]/div[2]/input'
wait.until(EC.visibility_of_element_located((By.XPATH, search_box_xpath)))
search_box = driver.find_element_by_xpath(search_box_xpath)
driver.execute_script("arguments[0].click();", search_box)
search_box.send_keys(MPN) # Type in MPN
search_button_xpath = '//html/body/header/div[2]/div[1]/div/div[2]/div[3]/button'
wait.until(EC.visibility_of_element_located((By.XPATH, search_button_xpath)))
search_button = driver.find_element_by_xpath(search_button_xpath)
driver.execute_script("arguments[0].click();", search_button)
# Wait for load
time.sleep(5)
# Try and read Stock availability
stockText_xpath = '//html/body/div[2]/main/div/div[1]/div[2]/div/div/div[2]/div/div[1]'
wait.until(EC.visibility_of_element_located((By.XPATH, stockText_xpath)))
print('ELEMENT FOUND!')
stockText = driver.find_element_by_xpath(stockText_xpath)
raw_input('FOUND STOCK TEXT!')
【问题讨论】:
-
XPATH of "//span[contains(text(), "In Stock")] 可能会这样做。请注意,如果您在那里使用帐户,这违反了他们的服务条款:“您不得使用任何机器人、抓取工具、蜘蛛程序或其他自动化方式访问或收集本网站的内容,或在任何其他网站或网页上镜像、联合品牌或框架主页或本网站的任何其他页面。”
-
像这样的长 xpath 非常不稳定。您是否在
stockText = driver.find_element_by_xpath(stockText_xpath)行收到错误消息? -
错误实际上是来自检查可见性的那一行上方的等待命令
-
另外,即使我在价格和采购部分搜索可以找到的更简单的东西(driver.find_element_by_class_name('jss334')),它仍然找不到它
标签: python-2.7 selenium iframe