2016-05-07 7 views
7

मैं सेलेनियम वेबड्राइवर & पायथन का उपयोग करके विभिन्न टैब में कुछ यूआरएल खोलना चाहता हूं।सेलेनियम एक नए टैब (पायथन और क्रोम) में एक नया यूआरएल नहीं खोलेंगे

मुझे यकीन है कि क्या गलत हो रहा है नहीं कर रहा हूँ:

driver = webdriver.Chrome() 
driver.get(url1) 
time.sleep(5) 
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL+'t') 
url2 = 'https://www.google.com' 
driver.get(item2) 

मैं ट्यूटोरियल देखा और मुझे लगता है जैसे कि यह कोड जो मैं चाहता क्या करना चाहिए। वास्तव में क्या होता है ब्राउज़र ब्राउज़र खुलता है, यूआरएल 1 खुलता है जैसा कि इसे करना चाहिए, एक नया टैब खुलता है क्योंकि इसे होना चाहिए, लेकिन url2 तब नए टैब की बजाय मूल टैब में लोड होता है (भले ही नया टैब सक्रिय हो)।

(मैं क्रोम का उपयोग कर रहा हूं क्योंकि फ़ायरफ़ॉक्स का उपयोग करते समय मैं इसे किसी भी यूआरएल को लोड नहीं कर सकता। फ़ायरफ़ॉक्स खुलता है लेकिन यूआरएल अनुरोध नहीं करता है। मैंने इसका समाधान खोजने की कोशिश की है लेकिन इसका कोई फायदा नहीं हुआ है।)

क्या नया कोड में नया यूआरएल खोलने के लिए मैं अपने कोड में कुछ भी बदल सकता हूं?

आपकी मदद के लिए धन्यवाद!

उत्तर

7

वहाँ ChromeDriver में एक बग है कि काम करने से ctrl/कमांड + T से बचाता है:

आप क्या कर सकते हैं, एक समाधान के रूप में, एक नए में एक लिंक को खोलने के लिए है टैब और फिर switch_to.window() का उपयोग कर एक नई विंडो पर स्विच करें। कार्य नमूना:

from selenium import webdriver 
from selenium.webdriver import ActionChains 
from selenium.webdriver.common.keys import Keys 

driver = webdriver.Chrome() 
driver.get("https://www.google.com") 

# open a link in a new window 
actions = ActionChains(driver) 
about = driver.find_element_by_link_text('About') 
actions.key_down(Keys.CONTROL).click(about).key_up(Keys.CONTROL).perform() 

driver.switch_to.window(driver.window_handles[-1]) 
driver.get("https://stackoverflow.com") 

अब पिछले driver.get() एक नए खुले टैब में प्रदर्शन किया जाएगा।

+0

धन्यवाद, लेकिन यह बग ctrl-t के बारे में प्रतीत होता है कि एक नया टैब नहीं खोल रहा है। मैं एक नया टैब ठीक खोल सकता हूं लेकिन उस टैब में यूआरएल लोड नहीं कर सकता। मैंने आपके कोड की कोशिश की लेकिन मैं शायद इसे सही ढंग से समझ नहीं पा रहा हूं। Find_element_by_link लाइन (तत्व का पता लगाने में असमर्थ) पर एक त्रुटि हुई थी। मैं एक HTML पृष्ठ (एक पृष्ठ स्रोत) लोड कर रहा हूं, मुझे यकीन नहीं है कि इससे कोई फर्क पड़ता है। – SamH123

+0

@ SamH123 ठीक है, आपके मामले में यह एक नया टैब खोलने के बाद आपको 'driver.switch_to.window (driver.window_handles [-1]) 'करने की आवश्यकता है। – alecxe

+0

बहुत बहुत धन्यवाद, जिसने काम किया है! – SamH123

8

यहाँ एक सरल तरीका है, मंच स्वतंत्र है:

कोड:

कोड::

driver.switch_to_window(driver.window_handles[0]) 

मौजूदा शीर्षक जाँच हो रही है

driver.execute_script("window.open('http://google.com', 'new_window')") 

मूल टैब पर वापस स्विच यह सुनिश्चित करने के लिए कि आप सही पृष्ठ पर हैं:

कोड:

driver.title 

सब कुछ के लिए, मजा!

+0

मैं क्रोम वेबड्राइवर का उपयोग कर रहा हूं और यह वास्तव में एक नए टैब में खुलता है, बहुत बहुत धन्यवाद – PossessWithin

5

एक नई विंडो खोलने का एक वैकल्पिक तरीका जावास्क्रिप्ट और विंडो हैंडलर का उपयोग करने के लिए उनके बीच स्विच करने के लिए है।

driver = webdriver.Chrome() 

# Open a new window 
# This does not change focus to the new window for the driver. 
driver.execute_script("window.open('');") 

# Switch to the new window 
driver.switch_to.window(driver.window_handles[1]) 
driver.get("http://stackoverflow.com") 

# close the active tab 
driver.close() 

# Switch back to the first tab 
driver.switch_to.window(driver.window_handles[0]) 
driver.get("http://google.se") 

# Close the only tab, will also close the browser. 
driver.close() 

आप अपने ब्राउज़र को देखने जब आप इसे नई विंडो की तरह दिखाई देगा क्रियान्वित कर रहे हैं ध्यान केंद्रित किया है, लेकिन webdriver करने के लिए, यह नहीं है। दृश्य द्वारा मूर्ख मत बनो।इसके अलावा एक नई विंडो हैंडलर चयन करने के लिए के रूप में यह driver.current_window_handle को

selenium.common.exceptions.NoSuchWindowException: 
    Message: no such window: target window already closed from unknown error: web view not found 
    (Session info: chrome=<Your version of chrome>) 
    (Driver info: chromedriver=<Your chrome driver version> (<string of numbers>),platform=<Your OS>) 
.close() पर

सेट हो जाएगा और यह कि त्रुटि फेंक अगर आप इस स्तर पर उनके ड्राइवर के साथ सामान करने की कोशिश करेंगे याद है जब आप एक टैब बंद करें।

संबंधित मुद्दे