如何修复Selenium网页爬虫中'WebElement'对象无'append'属性的报错
报错核心原因
- 变量名冲突:你预先声明的存储列表(如
MailList、FacebookList等)和for循环的迭代变量重名,循环执行时列表变量会被覆盖为单个WebElement对象,而WebElement本身没有append方法,因此触发报错。 - 元素查找方法使用错误:
- 除
mails使用find_elements_by_css_selector返回元素列表外,其余如FacebookAdres、kulupadi等均使用find_element_*系列方法,返回的是单个WebElement对象,不可迭代,直接用于for循环遍历本身就会抛出异常。 find_element_by_class_name不支持传入多个类名,你传入的btn bg-blue btn-social这类多类名参数会导致元素查找失败,需要改为CSS选择器写法。
- 除
修复后的代码
import time # 前面的浏览器初始化、点击按钮、滚动逻辑保留即可,以下是修复后的元素提取部分 mails = browser.find_elements_by_css_selector("#bilgiler > a.btn.bg-orange.btn-social") MailList=[] # 迭代变量改名为mail,避免和列表重名 for mail in mails: MailList.append(mail.text) # 多类名查找改为css选择器,单个元素无需循环,直接取值加入列表 FacebookAdres = browser.find_element_by_css_selector(".btn.bg-blue.btn-social") FacebookList=[] FacebookList.append(FacebookAdres.text) TwitterAdres = browser.find_element_by_css_selector(".btn.btn-social.bg-aqua") TwitterList=[] TwitterList.append(TwitterAdres.text) InstagramAdres = browser.find_element_by_css_selector(".btn.btn-social.bg-light-blue") InstagramList=[] InstagramList.append(InstagramAdres.text) kulupadi = browser.find_element_by_xpath("/html/body/div[2]/div[2]/section/div/div[2]/div/div[1]/div/div[1]/table/tbody/tr[1]/td[1]") kulupList=[] kulupList.append(kulupadi.text) AkademikDanisman = browser.find_element_by_xpath("/html/body/div[2]/div[2]/section/div/div[2]/div/div[1]/div/div[1]/table/tbody/tr[2]/td[1]/b") DanismanList=[] DanismanList.append(AkademikDanisman.text) KulupBaskani = browser.find_element_by_xpath("/html/body/div[2]/div[2]/section/div/div[2]/div/div[1]/div/div[1]/table/tbody/tr[3]/td[1]/b") BaskanList=[] BaskanList.append(KulupBaskani.text) ToplamUye = browser.find_element_by_xpath("/html/body/div[2]/div[2]/section/div/div[2]/div/div[1]/div/div[1]/table/tbody/tr[4]/td[1]/b") UyeList=[] UyeList.append(ToplamUye.text) ToplamEtkinlik = browser.find_element_by_xpath("/html/body/div[2]/div[2]/section/div/div[2]/div/div[1]/div/div[1]/table/tbody/tr[5]/td[1]/b") EtkinlikList=[] EtkinlikList.append(ToplamEtkinlik.text) time.sleep(5) browser.quit()
补充说明
如果实际场景中某类元素可能存在多个,把对应的find_element_by_*改为find_elements_by_*,再参照邮件提取的逻辑用不同名的迭代变量循环取值即可。
内容的提问来源于stack exchange,提问作者codesfullinmymind
相关产品推荐
相关产品推荐

