TypeError: expected string or bytes-like object, got 'NoneType'

#爬取豆瓣电影,使用selenium爬取,正则解析错误
#报错:TypeError: expected string or bytes-like object, got 'NoneType'
代码:


from selenium.webdriver.common.by import By
from selenium import webdriver
import time
import re
#options=webdriver.ChromeOptions()
#options.add_argument('--headless')

driver= webdriver.Chrome()

driver.get(url='https://www.douban.com/')

#切换到iframe子页面,切换句柄:
iframe_node=driver.find_element(By.XPATH,'//*[@id="anony-reg-new"]/div/div[1]/iframe')
driver.switch_to.frame(iframe_node)
driver.maximize_window()


driver.find_element(By.XPATH,"/html/body/div[1]/div[1]/ul[1]/li[2]").click()
driver.find_element(By.XPATH,'//*[@id="username"]').send_keys('18885410657')
driver.find_element(By.XPATH,'//*[@id="password"]').send_keys('708090.')
driver.find_element(By.XPATH,'/html/body/div[1]/div[2]/div[1]/div[5]/a').click()
time.sleep(5)
html=driver.get(url='https://accounts.douban.com/passport/login_popup?login_source=anony')
regex='<div class="tc-bg-img unselectable" .*? background-image: url(&quot;(.*?)).*?</div>'

pattern=re.compile(regex,re.S)
r_list=pattern.findall(html)
print(r_list)






#怎么解决,是正则表达式错误了么,我是新学者,请求帮忙!

参考链接:


解决办法:object = str(object)

html = driver.get(url='https://accounts.douban.com/passport/login_popup?login_source=anony%27)
这个不对,这个是打开webdriver页面

如果你要获取html的内容,你应该用driver.page_source

比如
driver.get(url='https://accounts.douban.com/passport/login_popup?login_source=anony%27)
time.sleep(5) # 延迟一段时间等待页面加载完成,也可以使用其他等待方式
html = driver.page_source

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:python错误提示:TypeError: expected string or bytes-like object
  • 以下回答由chatgpt基于相关博客总结生成:

    这个错误的原因是在使用driver.get()方法时,返回的值是None,并且你将其赋给了变量html。因此,在接下来的代码中,当你尝试对None进行正则表达式解析时,就会抛出"TypeError: expected string or bytes-like object, got 'NoneType'"的错误。

    要解决这个问题,可以采用以下步骤:

    1. 首先,确保你的Chrome浏览器和Chromedriver的版本是兼容的,并且已经正确安装。可以使用以下代码验证版本:
    print(webdriver.ChromeOptions().version)
    
    1. 修改你的代码,将driver.get()方法改为driver.page_source。这样就可以获取当前页面的源代码,将其作为字符串继续操作。具体更改如下:
    html = driver.page_source
    
    1. 将获取源代码之后的代码段放在time.sleep(5)之后,以确保页面加载完全。具体更改如下:
    time.sleep(5)
    html = driver.page_source
    
    regex = r'<div class="tc-bg-img unselectable" .*? background-image: url(&quot;(.*?).*?)&lt;/div&gt;'
    pattern = re.compile(regex, re.S)
    r_list = pattern.findall(html)
    print(r_list)
    
    1. 运行修改后的代码,看看是否还会出现错误。

    希望以上步骤能够解决你的问题。如果还有其他疑问,请随时追问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^