• 陈欣彤
    2022-11-17 来自辽宁
    class TestCase(object): def __init__(self): self.driver = webdriver.Chrome() self.driver.get('http://www.baidu.com') self.driver.maximize_window() sleep(3) def test_id(self): element = self.driver.find_element(By.ID, 'kw').send_keys('yuanshen') sleep(3) self.driver.find_element(By.ID, 'su').click() sleep(10) self.driver.quit() if __name__ == '__main__': case = TestCase() case.test_id() 运行后为什么会打开两个百度窗口

    作者回复: 在代码中,创建了一个 TestCase 类,该类在初始化方法 `__init__` 中创建了一个 Chrome 驱动器对象,打开了百度网站,并最大化窗口。接着,在 `test_id` 方法中,通过该驱动器对象找到搜索框,输入搜索词并点击搜索按钮,最后等待 10 秒后关闭浏览器。 在主程序中,首先创建了一个 TestCase 的实例,然后调用该实例的 `test_id` 方法。 由于在 `__init__` 方法中已经打开了百度网站并最大化了窗口,因此在调用 `test_id` 方法时,又会打开一个新的百度窗口。因此,程序最终会打开两个百度窗口。 为了解决这个问题,可以将打开网站和最大化窗口的代码从 `__init__` 方法中移动到 `test_id` 方法中,或者在初始化方法中加入判断,如果浏览器已经打开,则不再打开。例如: ``` class TestCase(object): def __init__(self): self.driver = None def test_id(self): if not self.driver: self.driver = webdriver.Chrome() self.driver.get('http://www.baidu.com') self.driver.maximize_window() sleep(3) element = self.driver.find_element(By.ID, 'kw').send_keys('yuanshen') sleep(3) self.driver.find_element(By.ID, 'su').click() sleep(10) self.driver.quit() if __name__ == '__main__': case = TestCase() case.test_id() ``` 在修改后的代码中,初始化方法只初始化了一个空的驱动器对象,而在测试方法中,通过判断驱动器对象是否为空来确定是否需要打开浏览器。这样,即使在初始化方法中打开了浏览器,由于在测试方法中判断浏览器对象不为空,因此不会再次打开浏览器

    
    
  • 海东
    2022-08-22 来自北京
    python安装跟你一样的版本,为什么没有find-element-by-id 这个方法

    作者回复: 这个根python没有关系是selenium里面的api 查看一下selenium

    共 2 条评论
    
  • Wjw_nn
    2022-07-29 来自陕西
    老师,为什么我的编辑器不能自动联想呢,没有设置低电量,用的3.10的版本

    作者回复: 你用的啥编辑器 pycharm吗?还是其他的 每个编辑器都不太一样

    
    
  • 婷婷
    2022-06-23
    老师我这边会一直校验图片的要怎么操作

    作者回复: 可以把图片校验跳过

    
    
  • 在路上
    2021-12-08
    from selenium import webdriver driver = webdriver.chrome() driver.maximize_window() 我的Pycharm环境 driver. 输入 m 没有自动提示出 maximize_window()这个方法

    作者回复: 看看是否有语法错误 这种情况一般就是语法错误

    
    
  • Geek_cde08d
    2021-06-25
    老师,你好! 听完您第8课的讲解之后,我对最后一个知识点还有一点不太理解的地方。我不太清楚重新定义一个方法get_element(driver, *loc)有什么好处? from selenium import webdriver from selenium.webdriver.common.by import By def get_element(driver, *loc): e = driver.find_element(*loc) return e if __name__ == '__main__': driver = webdriver.Chrome() driver.get('http://baidu.com') loc = (By.ID, 'kw') loc2 = (By.ID, 'su') get_element(driver, *loc).send_keys('selenium') get_element(driver, *loc2).click() 如果不额外定义一个方法,我在if __name__ == '__main__':代码里,直接使用driver.find_element(By.ID, 'kw').send_keys('selenium')的话,感觉代码会更少些。 from selenium import webdriver from selenium.webdriver.common.by import By if __name__ == '__main__': driver = webdriver.Chrome() driver.get('http://baidu.com') driver.find_element(By.ID, 'kw').send_keys('selenium') driver.find_element(By.ID, 'su').click() 老师能帮忙解答一下吗?谢谢!
    展开

    作者回复: 这样代码更具有通用性

    
    
  • 蓝丶鸢尾
    2021-04-24
    老师,我元素定位时候报错。不知道是啥错误,能帮我看看嘛 element = self.driver.find_element_by_id('kw') AttributeError: 'TestCase' object has no attribute 'driver'

    作者回复: driver 没有正确实例化 或者不在这个作用域

    共 2 条评论
    
  • 曦
    2021-03-20
    Traceback (most recent call last): File "E:/tools/PyCharm/PycharmProjects/FristProjects/demo01.py", line 35, in <module> case = TestCase() File "E:/tools/PyCharm/PycharmProjects/FristProjects/demo01.py", line 17, in __init__ self.driver = webdriver.Chrome() File "E:\tools\py3.7\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 81, in __init__ desired_capabilities=desired_capabilities) File "E:\tools\py3.7\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__ self.start_session(capabilities, browser_profile) File "E:\tools\py3.7\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session response = self.execute(Command.NEW_SESSION, parameters) File "E:\tools\py3.7\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "E:\tools\py3.7\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 87 Current browser version is 89.0.4389.90 with binary path C:\Program Files (x86)\Google\Chrome\Application\chrome.exe Process finished with exit code 1
    展开

    作者回复: 浏览器版本和驱动版本不一致

    
    
  • Mnemosyne
    2021-03-04
    老师,使用linktext元素定位之后就反复出现下面这个错误: ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。

    作者回复: 这个是联网问题

    
    
  • 彬(^_^)
    2021-01-28
    def get_element(driver, *loc): e = driver.find_element(*loc) return e 想问下自己定义一个类, driver.find_element中为什么不用加value就能够执行,value不是必填的参数吗

    作者回复: *loc可以是多个参数

    
    