我安装的python和pycharm community edition分别是:Python 3.8.5 和PyCharm 2020.2 (Community Edition)
在commandline中,运行:pip install selenium
在PyCharm中,点击 File -> Settings -> Project -> Python Interpreter -> + -> 输入selenium,点击install
import re from selenium import webdriver from time import sleep if __name__ == '__main__': # 后面是你的浏览器驱动位置,记得前面加r'','r'是防止字符转义的 driver = webdriver.Chrome(r'D:\panda\webDriver\chromedriver.exe') driver.get("https://www.newsmth.net/") driver.find_element_by_id("id").send_keys("********") #自己手动去水木注册一个账户 driver.find_element_by_id("pwd").send_keys("********") driver.find_element_by_id("b_login").click() sleep(1) driver.maximize_window() # 显示当前URL # print(driver.current_url) driver.get(driver.current_url) driver.find_element_by_id("b_search").send_keys("社会招聘\n") sleep(1) print(driver.current_url) href_list = [] items = driver.find_elements_by_xpath("//section[@id='body']/div[@class='b-content']/table/tbody/tr/td/a") # 右键“检查”或“查看源代码”可以看到元素的xpath for item in items: if "测试" in item.text or "QA" in item.text: print(item.text) href_list.append(item.get_property("href")) print(item.id, item.get_property("href")) # id会改变,不能后退,后退得重新找元素。 sleep(1) # print(href_list) for i1 in href_list: items = driver.find_elements_by_xpath("//section[@id='body']/div[@class='b-content']/table/tbody/tr/td/a") for i2 in items: if i2.get_attribute("href") == i1 and ("测试" in i2.text or "QA" in i2.text): print(i2.id, end=" ") i2.click() sleep(1) print(driver.current_url) driver.back() sleep(1) break #后退得重新找元素,所以这里break sleep(1) driver.quit()
这里需要注意:
1. driver.get(driver.current_url) 有的时候如果没有这句,可能定位不到那个元素
2. driver.back() 这个是goback操作,但是对于右侧为动态item,后退会导致id变化,以至于找不到曾经的那些元素。
3. 关于元素的定位,可以右键点击鼠标,选择“查看网页源代码”或者“检查”能找到。如果根据xpath来定位,可以根据id找到相对路径第一层的元素,然后往下找。