我的代碼:
#Open Website
profile_path = r'C:\Users\XXX\AppData\Local\Mozilla\Firefox\Profiles\ndefault-release'
options = Options()
options.binary_location = r'C:\Program Files\Mozilla Firefox\firefox.exe'
options.set_preference('profile', profile_path)
options.add_argument("--no-sandbox")
service = Service(r'C:\Users\XXX\geckodriver.exe')
driver = Firefox(service=service, options=options)
# declaration of variables
name = "x"
suffix = "x"
start_number = 1
end_number = 1000
for i in range(start_number, end_number):
driver.get('https://www.bauhaus.info/gewinnspiel')
time.sleep(3)
#driver.find_element(by=By.XPATH, value=f"/div/div/div/div/div[2]/div/div[2]/div/div/div/button").click()
element = driver.execute_script("""return document.querySelector('#usercentrics-root').shadowRoot.querySelector("button[data-testid='uc-accept-all-button']")""")
element.click()
time.sleep(1)
driver.switch_to.frame(0)
time.sleep(1)
driver.find_element(by=By.XPATH, value=f"/html/body/section/div/div/div/div[2]/div/div/div[1]/div[1]/form/div/div[3]/a").click()
time.sleep(2)
如果我在 Firefox 控制臺中添加 xpath,我會得到正確的輸出:
陣列 [a.btn.btn-primary]
但是只有當我手動單擊它時,白色視窗才打開:

uj5u.com熱心網友回復:
shadow_host = driver.find_element(By.ID, "usercentrics-root")
shadow_root = shadow_host.shadow_root
WebDriverWait(shadow_root, 30).until(EC.presence_of_element_located((By.CSS_SELECTOR, "button[data-testid='uc-accept-all-button']"))).click()
iframe = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.CSS_SELECTOR, "iframe[title=' blackweekgewinnspiel']")))
driver.switch_to.frame(iframe)
canvas = driver.find_element(By.CSS_SELECTOR, "canvas")
driver.execute_script("arguments[0].scrollIntoView(true);",canvas)
driver.execute_script("arguments[0].click();", canvas);
driver.switch_to.default_content()
需要注意的兩點:
- Accept Cookies 彈出視窗位于 shadow DOM 中,因此需要 selenium 4.1 或更高版本才能輕松訪問它。
- 輪盤位于 iframe 中,因此必須在單擊之前切換到那里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/532181.html
標籤:硒硒网络驱动程序
上一篇:在執行緒“main”java.lang.NoClassDefFoundError中出現錯誤例外:無法初始化類org.codehaus.groovy.reflection.ReflectionCache
