【问题标题】:Trying to open a tab in my opened browser with selenium试图用硒在我打开的浏览器中打开一个标签
【发布时间】:2018-03-31 05:29:12
【问题描述】:

我用 selenium 编写了一个小的 python 脚本来搜索谷歌并打开第一个链接,但是每当我运行这个脚本时,它都会打开一个控制台并打开一个新的 Chrome 窗口并在那个 Chrome 窗口中运行这个脚本。

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()

如何在我使用的浏览器中打开它?

【问题讨论】:

  • 您的意思是希望您的脚本在您手动打开的浏览器实例中打开选项卡?
  • 不可能使用 Selenium 在您使用的同一浏览器上打开新标签页。
  • 好的。因为我也希望从这里开始,我应该能够通过搜索,一旦打开第一个链接,我复制一些内容,检查我打开的标签,例如 Facebook 是否打开或打开它,然后用什么更新我的状态我从以前的网站复制的。
  • 您始终可以将 CTRL+T 快捷方式直接发送到链接,而不是执行单击操作然后处理新打开的窗口。见stackoverflow.com/questions/39281806/…
  • @BoboDarph 非常感谢。那样很酷。

标签: python selenium selenium-webdriver automation


【解决方案1】:
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()

一些观察:您获得的第一个链接可能不是您想要的第一个链接。就我而言,第一个链接是登录 Google 帐户。因此,您可能希望在打开它之前对其进行更多验证,例如检查它的 href 属性、检查它的文本以查看它是否匹配某些内容等。

另一个观察结果是,有更简单的方法可以抓取 google 搜索结果并直接使用 googles API 或像这样的第三方实现:https://pypi.python.org/pypi/googlehttps://pypi.python.org/pypi/google-search

【讨论】:

  • 谢谢。很有帮助。
【解决方案2】:

据我所知,没有办法将 Selenium 附加到已经运行的浏览器。

更重要的是,您为什么要这样做?我唯一能想到的是,如果您尝试使用浏览器手动设置某些内容,然后让 Selenium 从该手动设置状态对其进行处理。如果您希望测试尽可能一致地运行,则不应依赖人工以特定方式设置浏览器。脚本应该自己做。

【讨论】:

  • 我能想到一些为什么有人想要这样做的原因。使用脚本打开新标签并自动登录网络邮件帐户怎么样。
猜你喜欢
  • 2023-02-20
  • 1970-01-01
  • 2015-09-16
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 1970-01-01
相关资源
最近更新 更多