我正在尝试仅针对特定网站停用AdBlock,但我找不到办法。我尝试查看selenium documentation,但我找不到任何方法来禁用扩展。但是,我在阅读文档时仍然很陌生,所以我可能错过了一些东西。我还尝试使用selenium自动禁用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来获取checkbox元素。我相信道路是正确的。
我能想到的唯一解决方案是创建两个镀铬窗口:一个使用AdBlock,另一个不使用AdBlock。但是,我不想要两个窗口,因为这会使事情变得更复杂。
答案 0 :(得分:1)
使用selenium中的任何设置看起来都不可能。但是......您可以在创建驱动程序后自动添加要排除的域。
在您的测试实际开始之前,但在您初始化浏览器之后,请导航至chrome-extension:// [您的AdBlock扩展ID] /options.html。 AdBlock扩展ID对于crx文件是唯一的。所以进入chrome并在扩展管理器中找到值。例如,我的是gighmmpiobklfepjocnamgkkbiglidom。
在您导航到该页面后,点击“自定义”,然后“除了这些域以外的所有地方展示广告...”,然后将域名输入到字段,然后点击“确定”。繁荣!现在,域名已添加并将显示广告!只需确保
我知道它不是理想的快速,简单,一行代码解决方案......但它似乎是最好的选择,除非您想要挖掘本地存储文件并找到这些数据的添加位置。