gpt4 book ai didi

python - 如何修复尝试使用 Selenium 查找元素时引发的 TypeError?

转载 作者:太空狗 更新时间:2023-10-30 02:26:47 24 4
gpt4 key购买 nike

我正在尝试从网页中抓取所有链接。我正在使用 Selenium WebDriver 滚动并单击网页中的加载更多按钮。我正在尝试的代码如下所示:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import ElementNotVisibleException
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
from bs4 import BeautifulSoup

def fetch_links(url):
chrome_path = r"D:\nishant_pc_d_drive\nishant_pc\d_drive\update_engine\myntra_update\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get(url)

while True:
try:
scrollcount=1
while scrollcount<5:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
WebDriverWait(driver, 5)
scrollcount+=1

WebDriverWait(driver, 10).until(EC.presence_of_element_located(driver.find_elements_by_css_selector('.load_more .sbt-button, .load_more_order .sbt-button')))
driver.find_element_by_id("loadmore").click()
except (ElementNotVisibleException,NoSuchElementException) as e:
print "done"

x = driver.page_source
soup2 = BeautifulSoup(x, 'html.parser')
linkcount=0
for each in soup2.find_all('a',attrs={"class":"thumb searchUrlClass"}):
print "https://www.shoppersstop.com/"+each.get('href')
linkcount+=1
print linkcount

# thumb searchUrlClass

fetch_links("https://www.shoppersstop.com/women-westernwear-tops-tees/c-A206020")

但不幸的是它给我一个错误,如下所示:

Traceback (most recent call last):
File "D:/INVENTORY/shopperstop/fetch_link.py", line 36, in <module>
fetch_links("https://www.shoppersstop.com/women-westernwear-tops-tees/c-A206020")
File "D:/INVENTORY/shopperstop/fetch_link.py", line 21, in fetch_links
WebDriverWait(driver, 10).until(EC.presence_of_element_located(driver.find_element_by_class_name('sbt-button')))
File "C:\Python27\lib\site-packages\selenium\webdriver\support\wait.py", line 71, in until
value = method(self._driver)
File "C:\Python27\lib\site-packages\selenium\webdriver\support\expected_conditions.py", line 63, in __call__
return _find_element(driver, self.locator)
File "C:\Python27\lib\site-packages\selenium\webdriver\support\expected_conditions.py", line 328, in _find_element
return driver.find_element(*by)
TypeError: find_element() argument after * must be an iterable, not WebElement

如何解决这个错误?谢谢!

最佳答案

错误文本确实令人困惑。

基本上,一些预期条件 (EC) 方法使用 locator,而一些使用 element。您使用的那个只接受一个定位器,但您提供了一个元素

差异在 Selenium API 文档中有所解释 here :

element is a WebElement object.
locator is a tuple of (by, path).

locator 的实际示例是 (By.ID, 'someid')(您需要导入 Selenium 的“By”类)

因此,这是错误提供元素的初始代码:

WebDriverWait(driver, 10).until(
EC.presence_of_element_located(driver.find_element_by_class_name('sbt-button'))
)

应该更新为提供定位器:

WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, 'sbt-button'))
)

注意双括号。这是一个传递给 EC 方法的元组。

注意:在您的情况下,看起来您还需要多个元素,因此您还需要使用 EC.presence_of_all_elements_located() 而不是 EC.presence_of_element_located() .

关于python - 如何修复尝试使用 Selenium 查找元素时引发的 TypeError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43801836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com