注册公司网站模版,怎样在安装wordpress,为什么教育网站做的都很烂,手递手个人求职信息网我们可以直接使用模拟浏览器运行的方式来实现#xff0c;这样就可以做到在浏览器中看到是什么样#xff0c;抓取的源码就是什么样#xff0c;也就是可见即可爬。这样我们就不用再去管网页内部的 JavaScript 用了什么算法渲染页面#xff0c;不用管网页后台的 Ajax 接口到底… 我们可以直接使用模拟浏览器运行的方式来实现这样就可以做到在浏览器中看到是什么样抓取的源码就是什么样也就是可见即可爬。这样我们就不用再去管网页内部的 JavaScript 用了什么算法渲染页面不用管网页后台的 Ajax 接口到底有哪些参数。 要使用 selenium 必须先安装 chromedriver 驱动 驱动版本要和 chrome 版本一致: 首先禁止chorme 自动更新 host 文件配置 127.0.0.1 update.googleapis.com下载一个历史版本的 chrome https://google-chrome.cn.uptodown.com/windows/download/1025823664并下载对应的驱动 https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/119.0.6045.105/win64/chromedriver-win64.zip # 119.0.6045.105 是可以修改成对应的版本号这个可以拿到最新的驱动版本 https://blog.csdn.net/qq_42771102/article/details/142853514 Selenium介绍
Selenium 是一个强大的开源自动化测试工具主要用于Web应用程序的测试。它支持多种浏览器如Chrome, Firefox, Safari, Edge等和操作系统包括Windows, macOS, Linux等。Selenium提供了一个名为WebDriver的API允许开发者通过编写代码来控制浏览器行为从而实现网页加载、表单填写、按钮点击等操作的自动化。
Selenium 主要用途
Web应用测试Selenium最广泛的应用场景是用于自动化Web应用的功能测试。它可以模拟用户与网站或Web应用之间的交互过程比如登录、导航到不同页面、提交表单等。跨浏览器兼容性测试由于Selenium支持多款主流浏览器因此非常适合用来检查Web应用在不同浏览器环境下的表现是否一致。持续集成(CI)环境结合Jenkins、Travis CI等持续集成工具使用时Selenium可以帮助团队自动运行测试用例并及时反馈结果提高软件开发效率。爬虫技术虽然不是其设计初衷但有些人也会利用Selenium来进行网页数据抓取特别是当目标网站采用了JavaScript渲染内容时传统的HTTP请求方式可能无法获取完整信息。
Selenium 组件介绍
Selenium WebDriver这是目前最常用的组件之一提供了丰富的接口供编程语言调用以操控浏览器。Selenium IDE (Integrated Development Environment)一个浏览器插件形式存在的简易记录回放工具适用于快速创建简单的测试脚本。Selenium Grid允许多台机器并行执行测试任务提高了大规模测试的效率。 总之Selenium是一个非常灵活且功能强大的工具集对于任何需要进行Web自动化的人来说都是不可或缺的好帮手。无论是专业的质量保证工程师还是希望提升工作效率的前端开发者都可以从中受益。
打开浏览器
def open_browser():browser webdriver.Chrome()try:browser.get(https://www.baidu.com)# 使用 find_element 方法和 By.IDinput_box browser.find_element(By.ID, kw)# 输入搜索内容input_box.send_keys(街拍)# 点击搜索按钮input_box.send_keys(Keys.ENTER)# 等待页面加载完成wait WebDriverWait(browser, 10)wait.until(EC.presence_of_element_located((By.ID, content_left)))# 打印页面标题print(browser.current_url) # 打印当前页面的 urlprint(browser.get_cookies()) # 打印 cookieprint(browser.page_source) # 打印页面源代码except Exception as e:print(e)finally:input(按回车键关闭浏览器...) # 等待用户输入后关闭浏览器browser.quit() # 确保在最后关闭浏览器
访问网页
def open_url():browser webdriver.Chrome()try:browser.get(https://www.baidu.com)# 打印页面标题print(browser.title) # 打印当前页面的标题except Exception as e:print(e)finally:input(按回车键关闭浏览器...) # 等待用户输入后关闭浏览器browser.quit() # 确保在最后关闭浏览器查找节点
Selenium 可以驱动浏览器完成各 操作 比如填充表单、模拟点击等 Selenium 提供了 系列查找节点的方法我们可以用这些方法来获取想要的节点以便下一步执行一些动作或者提取信息# find_element_by_id 方法可以根据 id 属性来查找节点# find_element_by_name 方法可以根据 name 属性来查找节点# find_element_by_xpath 方法可以根据 xpath 表达式来查找节点# find_element_by_link_text 方法可以根据链接文本来查找节点# find_element_by_partial_link_text 方法可以根据部分链接文本来查找节点# find_element_by_tag_name 方法可以根据标签名来查找节点# find_element_by_class_name 方法可以根据类名来查找节点# find_element_by_css_selector 方法可以根据 CSS 选择器来查找节点def find_element():browser webdriver.Chrome()try:browser.get(https://www.xiaohongshu.com/user/profile/5768f3576a6a6977158b1e24?xsec_tokenxsec_sourcepc_search)# 使用class name 查找头像框avatar browser.find_element(By.CLASS_NAME,avatar-wrapper)# 查找里面的img标签img avatar.find_element(By.TAG_NAME,img)# 获取图片的src属性print(img.get_attribute(src))# 将图片保存到本地img.screenshot(avatar.png)except Exception as e:print(e)finally:input(按回车键关闭浏览器...) # 等待用户输入后关闭浏览器browser.quit() # 确保在最后关闭浏览器查找多个节点
def find_elements():browser webdriver.Chrome()try:browser.get(https://www.xiaohongshu.com/user/profile/5768f3576a6a6977158b1e24?xsec_tokenxsec_sourcepc_search)# 使用class name 查找所有标签channels browser.find_elements(By.TAG_NAME,channel)for channel in channels:# 获取每个标签的文本内容print(channel.text)except Exception as e:print(e)finally:input(按回车键关闭浏览器...) # 等待用户输入后关闭浏览器browser.quit() # 确保在最后关闭浏览器## 等待元素加载完成
动作链
def action_chains():browser webdriver.Chrome()try:browser.get(http://www.runoob.com/try/try.php?filenamejqueryui-api-droppable)browser.switch_to.frame(iframeResult)source browser.find_element(By.CLASS_NAME,ui-draggable)target browser.find_element(By.CLASS_NAME,ui-droppable)actions ActionChains(browser)actions.drag_and_drop(source, target)actions.perform()except Exception as e:print(e)finally:input(按回车键关闭浏览器...) # 等待用户输入后关闭浏览器browser.quit() # 确保在最后关闭浏览器执行某些 JavaScript 代码
def execute_js():browser webdriver.Chrome()try:browser.get(https://www.zhihu.com/explore)browser.execute_script(window.scrollTo(0, document.body.scrollHeight))browser.execute_script(alert(To Bottom))except Exception as e:print(e)finally:input(按回车键关闭浏览器...) # 等待用户输入后关闭浏览器browser.quit() # 确保在最后关闭浏览器#获取节点信息
#get_attribute 方法可以获取节点的属性值
# print(input.id)
#print(input.text)
#print(input.location)
#print(input.tag_name)
#print(input.size)
#调用其 id、location、tag_name、size 属性来获取对应的属性值。其他的操作
切换Frame
切换到指定的Frame可以使用 switch_to.frame 方法参数可以是 frame 元素的 id、name、索引、WebElement 对象。
def switch_frame():
browser webdriver.Chrome()
url http://www.runoob.com/try/try.php?filenamejqueryui-api-droppable
browser.get(url)
browser.switch_to.frame(iframeResult)
try:
logo browser.find_elements(By.CLASS_NAME,logo)
except NoSuchElementException:
print(NO LOGO)
browser.switch_to.parent_frame()
logo browser.find_elements(By.CLASS_NAME,logo)
print(logo)
input(按回车键关闭浏览器...) # 等待用户输入后关闭浏览器
browser.quit() # 确保在最后关闭浏览器前进和后退
前进和后退操作可以使用 back 和 forward 方法前进和后退到历史记录中的某一页。
def forward_back():
browser webdriver.Chrome()
browser.get(https://www.baidu.com/)
browser.get(https://www.taobao.com/)
browser.get(https://www.python.org/)
browser.back()
time.sleep(1)
browser.forward()
browser.close()Cookies
可以使用 add_cookie 方法添加 cookie并使用 get_cookies 方法获取所有 cookie。
def cookies():
browser webdriver.Chrome()
browser.get(https://www.zhihu.com/explore)
print(browser.get_cookies())
browser.add_cookie({name: name, domain: www.zhihu.com, value: germey})
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())选项卡管理
可以使用 window_handles 方法获取所有选项卡的句柄并使用 switch_to.window 方法切换到指定选项卡。
def tab_management():
browser webdriver.Chrome()
browser.get(https://www.baidu.com)
browser.execute_script(window.open())
print(browser.window_handles)
browser.switch_to.window(browser.window_handles[1]) # 切换到第二个选项卡
browser.get(https://www.taobao.com)
time.sleep(1)
browser.switch_to.window(browser.window_handles[0]) # 切换到第一个选项卡
browser.get(https://python.org)tab_management()