我正在尝试仅为特定网站禁用AdBlock,但我找不到一种方法。我尝试查看硒文档,但之后找不到任何禁用扩展的方法。但是,我在阅读文档方面仍然很陌生,所以我可能错过了一些东西。我还尝试使用硒自动禁用AdBlock扩展程序,但没有奏效。计划是转到chrome(chrome://extensions/(的扩展部分,获取"启用"复选框并在没有我干预的情况下单击它。这是我的尝试:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import StaleElementReferenceException
def main():
opening = True
while opening:
try:
chrome_options = Options()
#Path to AdBlock
chrome_options.add_extension('/usr/local/bin/AdBlock_v.crx')
driver = webdriver.Chrome(chrome_options=chrome_options)
except:
print('An unkown error has occured. Trying again...')
else:
opening = False
disable_adblocker(driver)
def click_element(driver, xpath, index):
getting = True
not_found_times = 0
while getting:
try:
getting = False
element = WebDriverWait(driver, 5).until(
EC.presence_of_all_elements_located((By.XPATH,xpath)))[index]
element.click()
#driver.get(element.get_attribute("href"))
#In case the page does not load properly
except TimeoutException:
not_found_times += 1
if not_found_times < 2:
driver.refresh()
getting = True
else:
raise
#In case DOM updates which makes elements stale
except StaleElementReferenceException:
getting = True
def disable_adblocker(driver):
driver.get('chrome://extensions')
ad_blocker_xpath = '//div[@id="gighmmpiobklfepjocnamgkkbiglidom"]//div[@class="enable-controls"]//input'
click_element(driver,ad_blocker_xpath,0)
print('')
main()
我的尝试失败的原因是 Selenium 无法使用我指定的 xpath 来获取复选框元素。我相信这条路是正确的。
我能想到的唯一解决方案是创建两个chrome窗口:一个带有AdBlock,另一个没有AdBlock。但是,我不想要两个窗口,因为这会使事情变得更加复杂。
使用硒中的任何设置似乎都不可能做到这一点。然而。。。您可以在创建驱动程序后自动添加要排除的域。
在测试实际开始之前,但在初始化浏览器之后,请导航到 chrome-extension://[您的 AdBlock 扩展 ID]/options.html。广告块扩展ID对于crx文件是唯一的。因此,进入 chrome 并在扩展管理器中找到值。例如,我的是gighmmpiobklfepjocnamgkkbiglidom。
导航到该页面后,点击"自定义",然后点击"在除这些网域之外的所有位置展示广告...",然后在字段中输入网域,然后点击"确定"。繁荣!现在域已添加,将显示广告!只要确保
我知道这不是理想的快速、简单、一行代码解决方案......但这似乎是最好的选择,除非您想挖掘本地存储文件并找到这些数据的添加位置......