首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium window_handles不适用于javascript按钮

Selenium window_handles不适用于javascript按钮
EN

Stack Overflow用户
提问于 2019-09-27 10:12:32
回答 2查看 204关注 0票数 0

我在做一个硒项目。我需要点击javascript按钮并将我的新url保存在selenium window_handles中。我的代码如下

代码语言:javascript
复制
window_before = driver.window_handles[0]
driver.find_element_by_xpath("//*[@id]/div/div[3]/div/button").click()
window_after = driver.window_handles[1]

但我得到了以下错误:

代码语言:javascript
复制
window_after = driver.window_handles[1]
IndexError: list index out of range
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-27 15:47:16

它基本上是在同一个窗口加载数据,而不是新的window.However,在搜索每个页面数据后,您可以找到5个概要文件来查看,我已经为您做了第一页,与公司details.Here是代码。

代码语言:javascript
复制
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
import time
driver = webdriver.Chrome()

driver.get('https://locatr.cloudapps.cisco.com/WWChannels/LOCATR/openBasicSearch.do;jsessionid=8CDF9284D014CFF911CB8E6F81812619')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='searchLocationInput']"))).send_keys('China')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//li[@class='ng-scope']//span[text()='CHINA']"))).click()
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.ID,"searchBtn"))).click()
buttons=WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,"button[action-type='viewProfileButton']")))

for i in range(len(buttons)):
    buttons = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "button[action-type='viewProfileButton']")))
    driver.execute_script("arguments[0].click();",buttons[i])

    item=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div.partnerAddressAlign"))).text
    print(item)
    time.sleep(2)
    WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"a[action-type='clickBackToResult']"))).click()
    print("=======================================")

控制台输出:

代码语言:javascript
复制
5A, TOWER A, PACIFIC CENTURY PLACE, 2A GONG TI BEI LU, CHAOYANG DISTRICT, BEIJING
BEIJING, BEIJING 100027 CHINA
8032 Kms away 
Gold Global Gold Master Specialized
Visit Partner Website
Show Additional Locations
=======================================
UNIT 1808, 18TH FLOOR CHINA WORLD TOWER 2
NO, 1 JIAN GUO MEN WAI AVENUE
BEIJING, BEIJING 100738 CHINA
8034 Kms away 
Gold Global Gold
Visit Partner Website | Call
Show Additional Locations
=======================================
702 TOWER W3 ORIENTAL PLAZA
BEIJING, BEIJING 100738 CHINA
8032 Kms away 
Gold Global Gold
Call
Show Additional Locations
=======================================
Dimension Data House
Building 2,Waterfront Business Park
Fleet Road
Fleet, HAMPSHIRE GU51 3QT UNITED KINGDOM
282 Kms away 
Gold Global Gold Master Specialized Customer Experience Specialized
Visit Partner Website | Call
Show Additional Locations
=======================================
110 BUCKINGHAM AVENUE
SLOUGH, BERKSHIRE SL1 4PF UNITED KINGDOM
259 Kms away 
Gold Global Gold Customer Experience Specialized
Visit Partner Website | Call
Show Additional Locations
=======================================
票数 2
EN

Stack Overflow用户

发布于 2019-09-27 12:29:26

从您的代码测试来看,还不太清楚为什么您期望使用多个window_handles,并且使用了:

代码语言:javascript
复制
window_before = driver.window_handles[0]

假设您有一个活动的window_handle,然后继续前进,您需要调用创建另一个window_handleclick(),以收集您需要用条件作为number_of_windows_to_be(2)诱导WebDriverWait的所有window_handles,并且可以使用以下解决方案:

  • 代码块: windows_before = driver.current_window_handle driver.current_window_handle WebDriverWait(驱动程序,10).until(EC.number_of_windows_to_be(2)) windows_after = driver.window_handles

您可以在在新选项卡Selenium + Python中打开web中找到详细的讨论

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58132472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档