我是硒新手,对python的了解很低。 只是我想关闭此页面https://it.ogame.gameforge.com/上的弹出窗口 它显示在页面顶部 弹出窗口不是问题,但想知道如何解决此问题。
我用chrome检查了元素,然后复制/粘贴了xpath。
使用代码
find_element_by_xpath('xpath code').click()
它可以正常工作,并且弹出窗口关闭,但是如果我刷新页面并使用相同的代码重试,则不再起作用,因为其中的一部分代码是动态的。我该如何解决这个问题?
我用Google搜索了几个小时,但暂时没有解决办法。
这是元素
<a href="javascript:;" onclick="MAX_simplepop_8afcd70d('close'); return false;">x</a>
xpath中的等效项是//*[@id="MAX_8afcd70d"]/div[1]/a
但是“ MAX_8afcd70d”部分一直在变化。
这是代码
from selenium import webdriver
import time
import traceback
driver=webdriver.Chrome()
driver.get('https://it.ogame.gameforge.com/')
time.sleep(2)
try:
driver.find_element_by_xpath('//*[@id="MAX_8afcd70d"]/div[1]/a').click()
except:
traceback.print_exc()
finally:
time.sleep(3)
driver.close()
##driver.find_element_by_link_text('x').click()
##this works
注释的代码可以工作,但是非常简单,我认为它不能一直工作。
只想知道如何使用硒管理页面中的动态代码。
答案 0 :(得分:0)
尝试一下。希望每次运行时它都能正常工作。
driver.find_element_by_xpath('//div[@class="openX_interstitial"]/div[1]/a').click()
让我知道这是否对您有用。
答案 1 :(得分:0)
对于您的情况,您在元素中具有唯一的类名,可用于轻松查找元素,而无需使用动态元素。
driver.find_element_by_xpath('//div[@class="openX_interstitial"]/div[1]/a').click()
但是,如果您特别想尝试处理动态路径,则可以尝试
driver.find_element_by_xpath('//div[contains(@id, "MAX_")]/div[1]/a')
或
driver.find_element_by_xpath('//div[starts-with(@id, "MAX_")]/div[1]/a')
答案 2 :(得分:0)
这是带有is_displayed()检查的版本。
// check if popup class is displayed.
popupelement = driver.find_element(By.CLASS_NAME, 'openX_int_closeButton')
if popupelement.is_displayed():
print "Popup class is displayed";
// safe-wait to be clickable
wait = WebDriverWait(driver, 10)
xbutton = wait.until(EC.element_to_be_clickable((By.XPATH, '//div[@id='openXHackFoo']//div[@class='openX_int_closeButton']/a)))
xbutton.click();
else:
print "Popup page is not displayed"