You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3中使用Selenium执行JavaScript代码移除广告时出错求助

问题分析与解决:Selenium移除广告时的WebDriverException错误

错误原因

你遇到的WebDriverException核心问题是JavaScript代码的语法错误:

elems[i].visibility=hidden;

这里的hidden是字符串值,必须用引号包裹,而且正确的DOM属性应该是style.visibility——直接写visibility会被JS解释为未定义的变量,所以抛出了hidden is not defined的错误。

另外你的Python代码还有两个小问题:

  • 导入语句格式错误:from selenium import webdriver import time应该分成两行,否则会触发语法错误
  • 旧版API调用:driver.find_elements_by_tag_name("iframe")是Selenium旧版方法,推荐使用新版的driver.find_elements(By.TAG_NAME, "iframe")

解决方法

1. 修正JavaScript代码

把隐藏iframe的JS代码改成正确写法,推荐直接移除元素(比设置可见性更彻底,避免残留占位空间):

# 修正后的移除广告逻辑
all_iframes = driver.find_elements(By.TAG_NAME, "iframe")
if len(all_iframes) > 0:
    print("Ad Found\n")
    # 倒序循环移除iframe,避免正序删除时索引错乱
    driver.execute_script("""
        var elems = document.getElementsByTagName('iframe');
        for(var i = elems.length - 1; i >= 0; i--) { 
            elems[i].remove();
        }
    """)
    print('Total Ads: ' + str(len(all_iframes)))
else:
    print('No frames found')

2. 修复Python代码的其他问题

修正导入语句、API调用,并添加容错处理:

from selenium import webdriver
import time
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("http://indianexpress.com/columnists/")

# 移除弹窗:先判断元素存在再点击,避免索引越界
later = driver.find_elements(By.CLASS_NAME, "iz_block_button")
if later:
    later[0].click()
    time.sleep(1)  # 等待弹窗关闭完成,避免后续操作冲突

# 移除广告iframe
all_iframes = driver.find_elements(By.TAG_NAME, "iframe")
if len(all_iframes) > 0:
    print("Ad Found\n")
    driver.execute_script("""
        var elems = document.getElementsByTagName('iframe');
        for(var i = elems.length - 1; i >= 0; i--) { 
            elems[i].remove();
        }
    """)
    print('Total Ads: ' + str(len(all_iframes)))
else:
    print('No frames found')

driver.close()

关于手动打开无广告但程序有广告的问题

这是因为:

  • 手动打开的Chrome是你的日常会话,可能带有广告拦截扩展(比如AdBlock)、浏览器缓存或登录状态,这些都会屏蔽广告
  • Selenium启动的是干净的Chrome会话,没有加载你的扩展和缓存,所以广告会正常显示

解决思路有两个:

  • 加载你的Chrome用户配置:让Selenium复用日常浏览器环境(包含广告拦截扩展)
    options = webdriver.ChromeOptions()
    # 替换为你的Chrome用户数据路径,Mac一般是~/Library/Application Support/Google/Chrome/Default
    options.add_argument('--user-data-dir=/Users/arjungoyal/Library/Application Support/Google/Chrome/Default')
    driver = webdriver.Chrome(options=options)
    
  • 给Selenium的Chrome安装AdBlock扩展:下载AdBlock的crx文件,通过ChromeOptions加载扩展

内容的提问来源于stack exchange,提问作者A Q

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:21:03