Selenium无法在主窗口中找到元素

我试图使用Selenium和Python 3从网站下载文件。这需要在覆盖窗口上按下确认按钮。叠加窗口不在iFrame中 - 只是在出现叠加时动态添加HTML - 但Selenium无法通过xPath找到该按钮,返回NoSuchElementException。我是否错过任何会导致Selenium无法看到该元素出现在页面源中的内容?据我所知,Selenium应该能够找到没有问题的按钮。Selenium无法在主窗口中找到元素

#Initialize Driver 

driver = webdriver.Safari()

cmd = "osascript -e 'tell application \"Safari\" to set bounds of front window to {0, 22, 1500, 1022}'"

os.system(cmd)

#Call up seach link

driver.get(data_url)

wait_a = WebDriverWait(driver, 15)

element = wait_a.until(EC.presence_of_element_located((By.ID, "md-input-3")))

#Initialize and send login information (defined above)

username = driver.find_element_by_id("md-input-3")

password = driver.find_element_by_id("md-input-6")

username.send_keys(crunchbase_username)

password.send_keys(crunchbase_password)

#Click login button

password.send_keys(Keys.ENTER)

#Wait for results page to finish loading

wait = WebDriverWait(driver, 15)

element = wait.until(EC.title_contains("Signals"))

time.sleep(2)

#Press Download Button

driver.find_element_by_xpath("//button[@aria-label='Export your results']").click()

time.sleep(2)

#Press csv button

driver.find_element_by_xpath("//button[@aria-label='Export to CSV']").click()

time.sleep(2)

#Confirm downlaod

driver.find_element_by_xpath("//*[@id='cdk-overlay-36']/md-dialog-container/confirmation-dialog/dialog-layout/div/md-dialog-actions/div/button[2]").click()

#Close driver

#driver.close()

页面的源代码过于复杂和高度程式化的,所以我不会在这里包括它,但在我的浏览器的Web检查代码的相关部分的截图如下。我试图点击的元素以蓝色突出显示。

Web Inspector Screenshot

我明白任何帮助。

回答:

这是很难说,而不必受到质疑访问页面,能看到发生了什么事情。几乎没有一点:

  1. 尝试css选择器而不是xpath。它们更健壮,更容易使用,速度更快。
  2. 避免使用动态生成的ID。在你的屏幕截图中,我甚至无法看到代码中出现的ID。
  3. 如果您有多个相同类型的元素(例如您的案例中的按钮),请尝试获取某个父级下的所有webelements,然后测试所有这些元素是否具有您正在查找的属性值。

例如:

elemItems = driver.find_elements_by_css_selector(menuItemSelector) 

for element in elements:

if element.text == "export":

elemItems[1].click()

在这里,你会发现某一类型(按钮为例),并选择一个已是“出口”文本中的所有元素。

回答:

之前点击的元素,请执行以下线路:

WebElement element = driver.findElement(By.xpath(" path_of_your_module ")); 

((JavaScriptExecutor) driver). executeScript("argument[0].scrollIntoView(true);", element);

以上是 Selenium无法在主窗口中找到元素 的全部内容, 来源链接: utcz.com/qa/261334.html

回到顶部