Selenium+Python报错NameError:name 'page_source' is not defined 求助
解决Selenium爬取网页邮箱时的NameError问题
错误原因
你触发的NameError: name 'page_source' is not defined是因为代码中直接引用了未定义的page_source变量。在Selenium中,网页源码需要通过你初始化的浏览器实例(也就是代码里的s)来获取,对应的属性是driver.page_source,这里就是s.page_source。
另外补充一个潜在问题:直接调用s.get()后立即获取源码,可能会因为页面未完全加载导致爬取不到内容,建议添加显式等待确保页面加载完成。
修正后的代码
import re from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By ser = Service(r"C:\Users\czoca\PycharmProjects\pythonProject4\chromedriver.exe") op = webdriver.ChromeOptions() s = webdriver.Chrome(service=ser, options=op) s.get('https://autosalpa.fi/fi/') # 显式等待,确保页面核心元素加载完成 WebDriverWait(s, 10).until(EC.presence_of_element_located((By.TAG_NAME, "body"))) EMAIL_REGEX = r'''(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])''' list_of_emails = [] # 关键改动:通过浏览器实例获取页面源码 for re_match in re.finditer(EMAIL_REGEX, s.page_source): list_of_emails.append(re_match.group()) for i, email in enumerate(list_of_emails): print(f'{i+1}:{email}') # 关闭浏览器释放资源 s.quit()
关键改动说明
- 将未定义的
page_source替换为s.page_source,正确获取当前页面的HTML源码 - 添加显式等待逻辑,避免页面未加载完成就执行抓取操作
- 代码末尾添加
s.quit(),确保浏览器进程正常关闭
内容的提问来源于stack exchange,提问作者Nolgath
相关产品推荐
相关产品推荐

