仅限于学习用,不足之处,请多多指教。
最近应朋友需求,用python写了一个网页自动翻页小工具(用了火狐浏览器)。在这个过程中查阅了很多资料,第一次接触html,学了很多东西,想跟大家分享一下。
在上代码之前,要确保自己电脑的已安装火狐浏览器(https://www.firefox.com.cn/),并根据自己的环境需求下载了火狐驱动 (https://github.com/mozilla/geckodriver/releases),解压获得geckodriver.exe。
上代码
代码解析
1. 代码里import了selenium.webdriver用于网页控制,import了win32api和win32con用于弹窗设置。(selenium通过指令“sudo pip install selenium”安装,win32api通过指令“pip install pywin32”安装。)
2.下面两句代码分别做了“打开火狐浏览器”、“打开指定网页”的操作。
想说的主要是第一句代码。如果已经把geckodriver.exe放到了环境变量中,那么“打开浏览器”的代码可以直接写成driver = webdriver.Firefox(),否则这句代码要写成driver = webdriver.Firefox(executable_path="xxx"),"xxx"是geckodriver.exe位置的绝对路径。
driver = webdriver.Firefox() #open firefox
driver.get("http://xxx-xxxx.cn/xxx/xxx") #open the page you want
3.由于车学长想进入的网页需要账号密码登录,所以用延时函数给自己留了输入账号密码的时间,这个时间介于20-40s之间,具体时长由随机函数产生。如果没有在限定时间内登录网页,就会弹出警告,并关闭打开的网页。
t = random.randint(20, 40)
time.sleep(t)
web_title = driver.title #Gets the name of the login page
if web_title != "xxxxxxxxxx":
win32api.MessageBox(0, "登录超时\n重新运行.exe文件", "警告", win32con.MB_ICONEXCLAMATION | win32con.MB_OK)
driver.close()
4.登录之后,网页自动打开车学长上次没看完的文件,这个时候使用了find_element_by_xpath进行多路径或多元素定位。这里想详细讲一下“path”那里,花了好多时间才勉强弄懂了path后面的内容怎么写。
#print(driver.page_source)
#Click the course button to enter the course selection page,and stay for 1-5s.
path = "//section/div[@id='xx']/div[@class='xxxxx']//div[@class='xxx']/div[@class='xxxx']/div/a[@href='xxxx']"
driver.find_element_by_xpath(path).click()
t = random.randint(1, 5)
time.sleep(t)
path=“xxx”引号里的内容是 打开文件需要点击的图标位置,也可以类比为文件路径,层层定位打开文件的图标位置,这个从网页的html代码里获取。由于这是第一次写代码控制网页、第一次接触html,找到的资料也不详细,所以刚开始调试的时候通过语句print(driver.page_source)获取网页的html,这样获取的html格式虽然能看,但比较乱(框架如下图 1)。然后慢慢去看去找去试哪个是图标的位置、怎么写这个路径才正确。
这个框架的格式可以类比为shell里嵌套的 if--else--fi 语句,即<xx>--</xx>为一层。由于没系统地学过html,通过观察和猜想,学长认为只要写出<div>里的就可以,中间的<ul>、<li>都可以用“/”替代。所以学长的文件图标位置表示为//<section>/div[@id='HHH']/div[@class='xxxxx']//div[@class='HHH']/div[@class='HHH']/div/a[@href='HHH'],运行结果正确。

在调试过程中,不注意,写成了driver.find_elements_by_xpath(path).click(),产生如下报错: ,去掉“s”就可以正常运行了。
关于网页各部分与html的关系,后来问了读计算机的同学,他告诉我,火狐打开网页后按F12,网页底下就会出现对应的html代码,把鼠标放到代码上,就会显示所指代码对应网页哪里(如下图 2)。后来摸索中发现,把鼠标放到图2的红框处,然后右击,选择“复制”,再选择“XPath”就可以获取需要的path路径(如下图3)。


进入未读完的文件后,后面代码逻辑一样,通过循环进行翻页。
本贴仅供内部学习研究使用,请勿将其用作任何实际用途,否则后果自负,作者将不为其承担任何法律责任。