我目前正在努力刮一个网站,以获得3d打印机的价格,但我经常遇到这个错误。这是代码:
import selenium
driver = webdriver.Chrome()
driver.get('https://www.dx.com/p/creality-cr10-v2-upgrade-ultraquiet-twoway-sphenoid-cooling-3d-printer-eu-plug-2711457.html#.Xy6c1SgzZhE')
price = driver.find_elements_by_class_name('low-sale-price')
p = price
if not p:
print('Printer out of stock')
if price != "":
for val in price:
a = val.text
b = str(a)
print(b)
break 这是一个错误:
Traceback (most recent call last):
File "C:\Users\scham\Desktop\PrinterCrawler.py", line 117, in <module>
DealExtremeEnder()
File "C:\Users\scham\Desktop\PrinterCrawler.py", line 111, in DealExtremeEnder
c = post.text
File "C:\Users\scham\AppData\Local\Programs\Python\Python38-32\lib\site-
packages\selenium\webdriver\remote\webelement.py", line 76, in text
return self._execute(Command.GET_ELEMENT_TEXT)['value']
File "C:\Users\scham\AppData\Local\Programs\Python\Python38-32\lib\site-
packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "C:\Users\scham\AppData\Local\Programs\Python\Python38-32\lib\site-
packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\scham\AppData\Local\Programs\Python\Python38-32\lib\site-
packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element
is not attached to the page document
(Session info: chrome=84.0.4147.105)我们将非常感谢您的帮助。提前谢谢你。
发布于 2020-08-09 17:40:38
我的猜测是,循环遍历price中的元素会导致StaleElementReferenceException --这意味着price列表中的元素在DOM中发生了变化,需要再次调用driver.find_elements,以便使用不过时的引用“刷新”元素。
您可以尝试这样修改代码,以重新查找price中的元素列表。
import selenium
driver = webdriver.Chrome()
driver.get('https://www.dx.com/p/creality-cr10-v2-upgrade-ultraquiet-twoway-sphenoid-cooling-3d-printer-eu-plug-2711457.html#.Xy6c1SgzZhE')
price = driver.find_elements_by_class_name('low-sale-price')
p = price
if not p:
print('Printer out of stock')
if price != "":
for val in price:
a = val.text
b = str(a)
print(b)
# refresh price element list before re-iterating the loop
price = driver.find_elements_by_class_name('low-sale-price')
break https://stackoverflow.com/questions/63327388
复制相似问题