selenium写一个自动化程序
7.17
-
-
Ctrl-Enter : 运行本单元
Shift + Tab : 提示(对于函数的提示)
Ctrl + Shift + – : 分割单元
ctrl + D : 删除该行内容
ctrl + U : 撤销
ctrl + / : 注释 -
如
- 根据id定位:element = web.find_element_by_id(“kw”)
- 根据name定位:element = web.find_element_by_name(“wd”)
- class name定位:element = web.find_element_by_class_name(‘s_ipt’)
- 根据tag定位:element = web.find_element_by_tag_name(‘input’)
- link text定位:element = web.find_element_by_link_text(‘新闻’)
- partial link text定位:element = web.find_element_by_partial_link_text(‘闻’)
- XPath定位:绝对路径右击→copy→copy full xpath;相对路径(推荐!)右击→copy→copy xpath;find_element_by_xpath
- css selector定位:右击→copy→copy selector element = web.find_element_by_css_selector(“#kw”);element = web.find_element_by_css_selector(“.s_ipt”);element = web.find_element_by_css_selector(“input”);element = web.find_element_by_css_selector(‘[id=“kw”]’)
;element = web.find_element_by_css_selector(‘input[id=“kw”]’);element=web.find_element_by_css_selector(‘[class=“s–top–left–new s-isindex-wrap”]’)(属性带空格,只能用css selector)
-
另一种表达
from selenium.webdriver.common.by import By
element = web.find_element(By.ID,‘kw’)
element = web.find_element(By.NAME,‘wd’)
element = web.find_element(By.CLASS_NAME,‘s_ipt’)
element = web.find_element(By.TAG_NAME,‘input’)
element = web.find_element(By.LINK_TEXT,‘新闻’)
element = web.find_element(By.PARTIAL_LINK_TEXT,‘闻’)
element = web.find_element(By.XPATH,‘//*[@id=“kw”]’)
element = web.find_element(By.CSS_SELECTOR,‘#kw’)
element = web.find_element(By.CSS_SELECTOR,‘[id=“kw”]’)
element = web.find_element(By.CSS_SELECTOR,‘input[id=“kw”]’)
-
-
解决方案2
使用循环遍历range(224873, 224882)来构建每个id对应的XPath表达式。然后,通过driver.find_element()方法和XPath表达式定位到对应的用户名元素。如果找到了用户名元素,则获取其文本内容并打印出来。如果未找到用户名元素,会打印相应的提示信息。
-
已完成:可查出某一页中多个用户名
-
遇到的难点3:翻页定位全部已提交的用户
-
解决方案3
-
已完成:可查出全部已提交的用户名
-
解决方案4:
创建了一个集合printed_usernames来存储已经打印过的用户名。在遍历每个用户名时,我们首先检查用户名是否已经存在于集合中,如果不存在,则打印用户名并将其添加到集合中,否则跳过打印。
-
已完成:可查出已提交的去重后的用户名
-
遇到的难点5:对比已有名单,给出未交名单
-
解决方案4:
-
已完成:给出未提交作业的名单
代码
#安装需要的包
#并且下载对应谷歌浏览器版本的谷歌驱动 最好放在anaconda1的安装目录下 http://chromedriver.storage.googleapis.com/index.html
from selenium import webdriver
from selenium.webdriver.common.by import By
# 访问首页
browser = webdriver.Chrome()
#这里是提交作业的网址
browser.get(r'http://')
#动态获得page的页数
page_element = browser.find_element_by_xpath('//*[@id="ct"]/div[6]/div')
page_text = page_element.text
page_number = int(page_text.split(' ')[1])
print(page_number)
#获取已提交的用户名单
# 创建一个集合用于存储已经打印过的用户名
printed_usernames = set()
# 创建一个计数器变量来记录已经打印过的用户名数量
username_count = 0
# 循环遍历页面范围
for page in range(1, page_number+1):
# 构建页面URL
url = f'http://&page={page}'
# 打开网页
browser.get(url)
# 获取页面中包含id的元素
elements = browser.find_elements(By.XPATH, '//*[@id]')
# 遍历元素,获取id值并进行定位
for element in elements:
element_id = element.get_attribute('id')
if element_id.startswith('pid'):
# 构建XPath表达式
xpath = f'//*[@id="{element_id}"]/tbody/tr[1]/td[1]/div[1]/div/a'
try:
# 定位用户名元素
username_element = browser.find_element(By.XPATH, xpath)
# 获取用户名文本
username = username_element.text
# 检查用户名是否已经打印过,若未打印过则打印并加入集合,并增加计数器
if username not in printed_usernames:
print(username)
printed_usernames.add(username)
username_count += 1
except:
print(f'未找到id为 {element_id} 的用户名元素')
# 输出统计的用户名数量
print(f'已提交的用户数量:{username_count}')
#获取未提交的用户名单
#已知的用户名单
known_usernames = [
"***", "***"
]
# 获取未提交的用户名列表
unsubmitted_usernames = [username for username in known_usernames if username not in printed_usernames]
# 输出未提交的用户名列表
for username in unsubmitted_usernames:
print(username)
原文地址:https://blog.csdn.net/Zlionheart/article/details/134693754
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_10399.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!