2017-10-19 20 views
0

J'ai écrit un petit script python avec sélénium pour rechercher Google et ouvrir le premier lien, mais chaque fois que je lance ce script, il ouvre une console et ouvre une nouvelle fenêtre Chrome et exécute ce script dans cette fenêtre Chrome.Essayer d'ouvrir un onglet dans mon navigateur ouvert avec sélénium

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

def main(): 
    setup() 

# open Chrome and open Google 
def setup(): 
    driver = webdriver.Chrome(r'C:\\python_programs'+ 
           '(Starting_out_python)'+ 
           '\\chromedriver.exe') 
    driver.get('https://www.google.com') 
    assert 'Google' in driver.title 
    mySearch(driver) 

#Search keyword 

def mySearch(driver): 
     search = driver.find_element_by_id("lst-ib") 
     search.clear() 
     search.send_keys("Beautiful Islam") 
     search.send_keys(Keys.RETURN) 
     first_link(driver) 

#click first link 

def first_link(driver): 
     link = driver.find_elements_by_class_name("r") 
     link1 = link[0] 
     link1.click() 
main() 

Comment puis-je l'ouvrir dans le même navigateur que celui que j'utilise?

+0

Voulez-vous dire que vous voulez que votre script ouvre l'onglet dans l'instance de navigateur que vous avez ouverte manuellement? – Andersson

+0

Il est impossible d'utiliser Selenium pour ouvrir un nouvel onglet sur le même navigateur que celui que vous utilisez. – Buaban

+0

Okay. Parce que je veux aussi que d'ici, je devrais être capable de passer une recherche et une fois le premier lien ouvert, je copie quelques contenus, vérifie mes onglets ouverts si Facebook par exemple est ouvert ou l'ouvre, puis mets à jour mon statut avec quoi J'ai copié du site précédent. –

Répondre

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

def main(): 
    setup() 

# open Chrome and open Google 
def setup(): 
    driver = webdriver.Chrome() 
    driver.get('https://www.google.com') 
    assert 'Google' in driver.title 
    mySearch(driver) 

#Search keyword 

def mySearch(driver): 
     search = driver.find_element_by_id("lst-ib") 
     search.clear() 
     search.send_keys("test") 
     search.send_keys(Keys.RETURN) 
     first_link(driver) 

#click first link 

def first_link(driver): 
     link = driver.find_elements_by_xpath("//a[@href]") 
     # uncomment to see each href of the found links 
     # for i in link: 
     #  print(i.get_attribute("href")) 
     first_link = link[0] 
     url = first_link.get_attribute("href") 
     driver.execute_script("window.open('about:blank', 'tab2');") 
     driver.switch_to.window("tab2") 
     driver.get(url) 
     # Do something else with this new tab now 
main() 

Quelques observations: le premier lien que vous obtenez peut-être pas le premier lien que vous voulez. Dans mon cas, le premier lien est la connexion au compte Google. Donc, vous pouvez vouloir faire plus de validation jusqu'à ce que vous l'ouvriez, comme vérifier sa propriété href, vérifier son texte pour voir s'il correspond à quelque chose, etc

Une autre observation est qu'il existe des moyens plus faciles d'explorer les résultats de recherche google et l'utilisation de l'API googles directement ou une mise en œuvre thirdparty comme ceci: https://pypi.python.org/pypi/google ou https://pypi.python.org/pypi/google-search

+0

Merci. C'est utile. –

1

à ma connaissance, il n'y a aucun moyen de joindre sélénium à un navigateur déjà en cours d'exécution.

Plus précisément, pourquoi voulez-vous faire cela? La seule chose à laquelle je peux penser est si vous essayez de configurer manuellement quelque chose avec le navigateur, et que Selenium fasse des choses à partir de cet état manuellement. Si vous souhaitez que vos tests s'exécutent aussi régulièrement que possible, vous ne devriez pas vous fier à un humain qui configure le navigateur d'une manière particulière; le script devrait le faire lui-même.