嘛,多数情况下,还是可以通过类名或者别的手段来获取句柄的。通过整数值来获取句柄有时候反而更少些。
当时我也试过通过 Python 去操控软件自动化,但是我却无法获取到其数值的更新,即便我获取到目标窗口的句柄。因为有些时候一些操作需要判断相关字样采取不同方式的。或许是我见识少吧,如果确实有相关方式解决这个问题的话也请告诉我一下。
后来我直接放弃掉这种操控软件的方式自动化。采取了抓包模拟(本质和爬虫一样)的方式来自动化了。当然,效果是更加理想的。不过有时候弄参数比较费时间和精力,不如操控控件自动化来得简单直接。
-----------------
回到你说的问题上吧,句柄变化的话通过别的方式识别出来,比如其类名。有一个软件叫 LookHandles,可以方便查看句柄相关信息。
--------------
有什么方法可实现python自动化操作C#开发的软件?
pyautogui, win32api 之类的。
首先,假设通过Firefox()浏览器定向爬取CSDN首页导航栏信息,审查元素代码如下图所示,在div class="menu"路径的ul、li、a下,同时可以定位ul class="clearfix"。代码如下所示:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# coding=utf-8
import os
from selenium import webdriver
#PhantomJS无界面浏览器
##driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
#打开火狐浏览器
driver = webdriver.Firefox()
url = "http://www.csdn.net/"
driver.get(url)
#xpath路径定位导航栏
elem_dh = driver.find_elements_by_xpath("//div[@class='menu']/ul/li/a")
for elem in elem_dh:
print elem.text#获取正文
print elem.get_attribute('href') #获取属性值
然后转换成chrome浏览器,只需要在"C:\Program Files (x86)\Google\Chrome\Application\"路径下放置个chromedriver.exe驱动,再进行调用即可,代码如下所示:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# coding=utf-8
import os
from selenium import webdriver
#PhantomJS无界面浏览器
##driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
#打开火狐浏览器
#driver = webdriver.Firefox()
#谷歌浏览器
chromedriver = "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
#WebDriverException: Message: unknown error: session deleted because of page crash
url = "http://www.csdn.net/"
driver.get(url)