SEO技术

SEO技术

Products

当前位置:首页 > SEO技术 >

台州网站如何优化以提高百度排名?

96SEO 2026-02-20 05:42 0


selenium是网页应用中最流行的自动化测试工具可以用来做自动化测试或者浏览器爬虫等。

台州网站如何优化以提高百度排名?

官网地址为相对于另外一款web自动化测试工具QTP来说有如下优点

免费开源轻量级不同语言只需要一个体积很小的依赖包支持多种系统包括WindowsMacLinux支持多种浏览器包括ChromeFireFoxIEsafariopera等支持多语言包括JavaCpythonc#等主流语言支持分布式测试用例执行

pythonselenium环境安装

另外还需要下载浏览器相应的webdriver驱动程序注意下载的驱动版本一定要匹配浏览器版本。

Firefox浏览器驱动Chrome浏览器驱动IE浏览器驱动Edge浏览器驱动Opera浏览器驱动

下载以后可以把驱动程序加到环境变量这样使用时就不用手动指定驱动程序路径。

使用selenium启动浏览器

可以在python中使用下面的代码启动一个Chrome浏览器然后控制这个浏览器的行为或者读取数据。

from

启动Chrome浏览器要求chromedriver驱动程序已经配置到环境变量

driver

webdriver.Chrome(rD:/uusama/tools/chromedriver.exe)driver

webdriver.Ie()

PhantomJSdriver.get(http://uusama.com)

启动的时候还可以设置启动参数比如下面的代码实现启动时添加代理并且忽略https证书校验。

from

webdriver.ChromeOptions()options.add_argument(--proxy-server127.0.0.1:16666)

设置代理

options.add_argument(---ignore-certificate-errors)

设置忽略https证书校验

options.add_experimental_option(excludeSwitches,

[enable-logging])

options.add_experimental_option(prefs,

prefs)

webdriver.Chrome(optionsoptions)

启动的时候还可以设置启动参数比如下面的代码实现启动时添加代理并且忽略https证书校验。

from

webdriver.ChromeOptions()options.add_argument(--proxy-server127.0.0.1:16666)

设置代理

options.add_argument(---ignore-certificate-errors)

设置忽略https证书校验

options.add_experimental_option(excludeSwitches,

[enable-logging])

options.add_experimental_option(prefs,

prefs)

webdriver.Chrome(optionsoptions)

options.add_argument(--proxy-server127.0.0.1:16666):

设置代理可以结合mitmproxy进行抓包等option.add_experimental_option(excludeSwitches,

设置绕过selenium检测options.add_argument(---ignore-certificate-errors):

设置忽略https证书校验options.add_experimental_option(prefs,

{profile.managed_default_content_settings.images:

2}):

设置不请求图片模式加快页面加载速度chrome_options.add_argument(--headless):

设置无头浏览器

使用selenium打开页面以后还不能立刻操作需要等到待处理页面元素加载完成这时就需要检测和等待页面元素加载。

使用time.sleep()等待

最简单的方法就是打开页面以后使用time.sleep()强制等待一定时间该方法只能设置一个固定时间等待如果页面提前加载完成则会空等阻塞。

from

另外还可以使用implicitly_wait设置最长等待时间如果在给定时间内页面加载完成或者已经超时才会执行下一步。

该方法会等到所有资源全部加载完成也就是浏览器标签栏的loading图表不再转才会执行下一步。

有可能页面元素已经加载完成但是js或者图片等资源还未加载完成此时还需要等待。

另需注意使用implicitly_wait只需设置一次且对整个driver生命周期都起作用凡是遇到页面正在加载都会阻塞。

示例如下

print(driver.current_url)driver.get(http://baidu.com)

使用WebDriverWaitselenium.webdriver.support.wait.WebDriverWait能够更加精确灵活地设置等待时间WebDriverWait可在设定时间内每隔一段时间检测是否满足某个条件如果满足条件则进行下一步操作如果超过设置时间还不满足则抛出TimeoutException异常其方法声明如下

timeout,

driver浏览器驱动timeout最长超时时间默认以秒为单位poll_frequency检测的间隔步长时间默认为0.5秒ignored_exceptions忽略的异常即使在调用until()或until_not()的过程中抛出给定异常也不中断

WebDriverWait()一般配合until()或until_not()方法使用表示等待阻塞直到返回值为True或者False需要注意这两个方法的参数都需是可调用对象即方法名称可以使用expected_conditions模块中的方法或者自己封装的方法。

from

判断id为input的元素是否被加到了dom树里并不代表该元素一定可见如果定位到就返回WebElement

element

0.5).until(expected_conditions.presence_of_element_located((By.ID,

s_btn_wr)))#

implicitly_wait和WebDriverWait都设置时取二者中最大的等待时间

判断某个元素是否被添加到了dom里并且可见可见代表元素可显示且宽和高都大于0

WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,

su)))#

WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(byBy.ID,

valuekw)))

判断当前页面title是否精确等于预期title_contains:

判断当前页面title是否包含预期字符串presence_of_element_located:

判断某个元素是否被加到了dom树里并不代表该元素一定可见visibility_of_element_located:

判断某个元素是否可见元素非隐藏并且元素的宽和高都不等于0visibility_of:

跟上面的方法做一样的事情只是上面的方法要传入locator这个方法直接传定位到的element就好了presence_of_all_elements_located:

判断是否至少有1个元素存在于dom树中。

举个例子如果页面上有n个元素的class都是column-md-3那么只要有1个元素存在这个方法就返回Truetext_to_be_present_in_element:

判断某个元素中的text是否包含了预期的字符串text_to_be_present_in_element_value:

判断某个元素中的value属性是否包含了预期的字符串frame_to_be_available_and_switch_to_it:

判断该frame是否可以switch进去如果可以的话返回True并且switch进去否则返回Falseinvisibility_of_element_located:

判断某个元素中是否不存在于dom树或不可见element_to_be_clickable:

判断某个元素中是否可见并且是enable的这样的话才叫clickablestaleness_of:

等某个元素从dom树中移除注意这个方法也是返回True或Falseelement_to_be_selected:

判断某个元素是否被选中了,一般用在下拉列表element_selection_state_to_be:

判断某个元素的选中状态是否符合预期element_located_selection_state_to_be:

跟上面的方法作用一样只是上面的方法传入定位到的element而这个方法传入locator

另外还可以使用driver.execute_script(return

注意document加载完成是不包括那种异步加载ajax请求动态渲染dom的这种需要使用WebDriverWait检测某个元素是否渲染完成。

selenium元素定位和读取

selenium提供了一系列api方便获取chrome中的元素这些API都返回WebElement对象或其列表如

查找匹配id的第一个元素find_element_by_class_name():

查找匹配class的第一个元素find_elements_by_xpath():

查找匹配xpath的所有元素find_elements_by_css_selector():

其实可以看WebDriver类里面的实现源码其核心实现都是调用两个基本函数

find_element(self,

查找匹配策略的第一个元素find_elements(self,

byBy.ID,

find_element_by_xpath(//*[contains(text(),登录)])查询包含类名refresh的所有元素

find_elements_by_class_name(refresh)查询table表格的第二行

find_element_by_css_selector(table

tbody

上面介绍的元素查找结果WebElement对象常用的api有:

element.text:

返回元素的文本内容包括所有后代节点的内容注意如果元素displaynone则返回为空字符串element.screenshot_as_png:

元素输入框输入input字符串element.get_attribute(data-v):

获取data-v名称属性值除了自定义节点属性还可以获取如textContent等属性element.is_displayed():

点击元素如果元素不可点击会抛出ElementNotInteractableException异常element.submit():

模拟表单提交

如果找不到指定元素则会抛出NoSuchElementException异常而且需要注意displaynone的元素是可以获取到的凡是在dom节点中的元素都可以获取到。

而且实际使用的时候要注意一些js代码动态创建的元素可能需要轮询获取或者监控。

def

check_element_exists(xpath):try:driver.find_element_by_xpath(xpath)except

Falsereturn

webdriver通过ActionChains对象来模拟用户操作该对象表示一个动作链路队列所有操作会依次进入队列但不会立即执行直到调用perform()方法时才会执行。

其常用方法如下

单击鼠标左键click_and_hold(on_elementNone):

点击鼠标左键不松开context_click(on_elementNone):

点击鼠标右键double_click(on_elementNone):

双击鼠标左键send_keys(*keys_to_send):

发送某个键到当前焦点的元素send_keys_to_element(element,

*keys_to_send):

拖拽到某个元素然后松开drag_and_drop_by_offset(source,

xoffset,

拖拽到某个坐标然后松开move_by_offset(xoffset,

yoffset):

鼠标从当前位置移动到某个坐标move_to_element(to_element):

鼠标移动到某个元素move_to_element_with_offset(to_element,

xoffset,

执行链中的所有动作release(on_elementNone):

在某个元素位置松开鼠标左键

下面代码模拟鼠标移动点击拖拽等操作注意操作时需要等待一定时间否则页面还来不及渲染。

from

selenium.webdriver.common.action_chains

import

driver.get(https://www.baidu.cn)

action_chains

driver.find_element_by_link_text(搜索)

移动鼠标到指定元素然后点击

action_chains.move_to_element(target).click(target).perform()

time.sleep(2)#

action_chains.move_by_offset(10,

50).perform()

action_chains.move_to_element_with_offset(target,

10,

driver.find_element_by_id(dragger)

target).perform()

action.click_and_hold(dragger).release(target).perform()

time.sleep(2)

action.click_and_hold(dragger).move_to_element(target).release().perform()

模拟键盘输入事件

删除键BackSpacesend_keys(Keys.SPACE):

制表键(Tab)send_keys(Keys.ESCAPE):

全选CtrlAsend_keys(Keys.CONTROL,c):

复制CtrlCsend_keys(Keys.CONTROL,x):

剪切CtrlXsend_keys(Keys.CONTROL,v):

粘贴CtrlV

driver.find_element_by_id(kw).send_keys(uusamaa)#

driver.find_element_by_id(kw).send_keys(Keys.BACK_SPACE)

警告框处理

切换到警告框text返回alert/confirm/prompt中的文字信息比如js调用alert(failed)则会获取failed字符串accept()接受现有警告框dismiss()关闭现有警告框send_keys(keysToSend)将文本发送至警告框

selenium浏览器控制

获取当前活动窗口的urldriver.switch_to_window(windowName):

移动到指定的标签窗口driver.switch_to_frame(frameName):

移动到指定名称的iframedriver.switch_to_default_content():

移动到默认文本内容区driver.maximize_window():

将浏览器最大化显示driver.set_window_size(480,

800):

设置浏览器宽480、高800显示driver.forword(),

driver.back():

关闭整个浏览器driver.save_screenshot(screen.png):

保存页面截图driver.maximize_window():

将浏览器最大化显示browser.execute_script(return

执行js脚本

使用get_cookies和add_cookie可以实现将cookie缓存到本地然后启动时加载这样可以保留登录态。

实现如下

import

driver.get(https://www.baidu.cn)#

读取所有cookie并保存到文件

cookies:driver.add_cookie(cookie)

使用driver.get(url)会默认在第一个标签窗口打开指定连接点击页面中的_blank的链接时也会打开一个新的标签窗口。

还可以用下面的方式手动打开一个指定页面的标签窗口需要注意打开新窗口或者关闭以后还需要手动调用switch_to.window切换当前活动的标签窗口否则会抛出NoSuchWindowException异常。

from

driver.get(https://www.baidu.cn)new_tab_url

http://uusama.com

driver.execute_script(fwindow.open({new_tab_url},

_blank);)

注意必须调用switch_to.window手动切换window否则会找不到tab

view

driver.switch_to.window(driver.window_handles[1])

time.sleep(2)

driver.switch_to.window(driver.window_handles[0])

time.sleep(1)

除了使用execute_script外还可以使用模拟打开新tab页按键的方式新建一个标签页窗口

driver.find_element_by_tag_name(body).send_keys(Keys.CONTROL

t)ActionChains(driver).key_down(Keys.CONTROL).send_keys(t).key_up(Keys.CONTROL).perform()

selenium一些问题记录

如果一个元素是隐藏的即displaynone虽然可以通过find_element查找到该元素但是用element.text属性是获取不到该元素文本内容的其值是空字符串这时可以用下面的方式获取

element

driver.find_element_by_id(uusama)

element)

driver.execute_script(arguments[0].style.display

block;,

Memory内存不足的错误此时WebDriver会抛出WebDriverException异常基本所有api都会抛出这个异常这个时候需要捕获并进行特殊处理。

我的处理方式是记录页面的一些基本信息比如urlcookie等并定期写入到文件中如果检测到该异常则重启浏览器并且加载url和cookie等数据。

selenium抓取页面请求数据

网上有通过driver.requests或者通过解析日志来获取页面请求的方式但是我感觉都不是很好使。

最后使用mitmproxy代理进行抓包处理然后启动selenium时填入代理来实现。

proxy.py为在mitmproxy基础上封装的自定义代理请求处理其代码如下

import

**kwargs):super().__init__(*args,

**kwargs)def

funcNone):try:DumpMaster.run(self,

func)except

KeyboardInterrupt:self.shutdown()def

process(url:

flow.request.headers[Connection]

close#

response_content.data.content.startswith(b\x1f\x8b\x08):response_content

gzip.decompress(response_content.data.content).decode(utf-8)Addon.EXECUTOR.submit(process,

url,

ProxyServer(config)master.addons.add(Addon())master.run()if

__name__

fin:fin.write(os.getpid().__str__())run_proxy_server()

在使用mitmproxy过程中随着时间推移proxy.py会出现占用内存飙升的问题在github的issue区有人也遇到过有说是因为http连接keep-alivetrue请求会一直保存不会释放导致请求越多越占用内存然后通过添加flow.request.headers[Connection]

close来手动关闭连接我加了以后有一定缓解但还是不能从根本上解决。

最后通过写入proxy.pid记录代理程序进程然后用另外一个程序定时重启proxy.py来解决内存泄漏的问题。

同时在这我为大家准备了一份软件测试视频教程含面试、接口、自动化、性能测试等就在下方需要的可以直接去观看。

【2024最新版】Python自动化测试15天从入门到精通10个项目实战允许白嫖。



SEO优化服务概述

作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。

百度官方合作伙伴 白帽SEO技术 数据驱动优化 效果长期稳定

SEO优化核心服务

网站技术SEO

  • 网站结构优化 - 提升网站爬虫可访问性
  • 页面速度优化 - 缩短加载时间,提高用户体验
  • 移动端适配 - 确保移动设备友好性
  • HTTPS安全协议 - 提升网站安全性与信任度
  • 结构化数据标记 - 增强搜索结果显示效果

内容优化服务

  • 关键词研究与布局 - 精准定位目标关键词
  • 高质量内容创作 - 原创、专业、有价值的内容
  • Meta标签优化 - 提升点击率和相关性
  • 内容更新策略 - 保持网站内容新鲜度
  • 多媒体内容优化 - 图片、视频SEO优化

外链建设策略

  • 高质量外链获取 - 权威网站链接建设
  • 品牌提及监控 - 追踪品牌在线曝光
  • 行业目录提交 - 提升网站基础权威
  • 社交媒体整合 - 增强内容传播力
  • 链接质量分析 - 避免低质量链接风险

SEO服务方案对比

服务项目 基础套餐 标准套餐 高级定制
关键词优化数量 10-20个核心词 30-50个核心词+长尾词 80-150个全方位覆盖
内容优化 基础页面优化 全站内容优化+每月5篇原创 个性化内容策略+每月15篇原创
技术SEO 基本技术检查 全面技术优化+移动适配 深度技术重构+性能优化
外链建设 每月5-10条 每月20-30条高质量外链 每月50+条多渠道外链
数据报告 月度基础报告 双周详细报告+分析 每周深度报告+策略调整
效果保障 3-6个月见效 2-4个月见效 1-3个月快速见效

SEO优化实施流程

我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:

1

网站诊断分析

全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。

2

关键词策略制定

基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。

3

技术优化实施

解决网站技术问题,优化网站结构,提升页面速度和移动端体验。

4

内容优化建设

创作高质量原创内容,优化现有页面,建立内容更新机制。

5

外链建设推广

获取高质量外部链接,建立品牌在线影响力,提升网站权威度。

6

数据监控调整

持续监控排名、流量和转化数据,根据效果调整优化策略。

SEO优化常见问题

SEO优化一般需要多长时间才能看到效果?
SEO是一个渐进的过程,通常需要3-6个月才能看到明显效果。具体时间取决于网站现状、竞争程度和优化强度。我们的标准套餐一般在2-4个月内开始显现效果,高级定制方案可能在1-3个月内就能看到初步成果。
你们使用白帽SEO技术还是黑帽技术?
我们始终坚持使用白帽SEO技术,遵循搜索引擎的官方指南。我们的优化策略注重长期效果和可持续性,绝不使用任何可能导致网站被惩罚的违规手段。作为百度官方合作伙伴,我们承诺提供安全、合规的SEO服务。
SEO优化后效果能持续多久?
通过我们的白帽SEO策略获得的排名和流量具有长期稳定性。一旦网站达到理想排名,只需适当的维护和更新,效果可以持续数年。我们提供优化后维护服务,确保您的网站长期保持竞争优势。
你们提供SEO优化效果保障吗?
我们提供基于数据的SEO效果承诺。根据服务套餐不同,我们承诺在约定时间内将核心关键词优化到指定排名位置,或实现约定的自然流量增长目标。所有承诺都会在服务合同中明确约定,并提供详细的KPI衡量标准。

SEO优化效果数据

基于我们服务的客户数据统计,平均优化效果如下:

+85%
自然搜索流量提升
+120%
关键词排名数量
+60%
网站转化率提升
3-6月
平均见效周期

行业案例 - 制造业

  • 优化前:日均自然流量120,核心词无排名
  • 优化6个月后:日均自然流量950,15个核心词首页排名
  • 效果提升:流量增长692%,询盘量增加320%

行业案例 - 电商

  • 优化前:月均自然订单50单,转化率1.2%
  • 优化4个月后:月均自然订单210单,转化率2.8%
  • 效果提升:订单增长320%,转化率提升133%

行业案例 - 教育

  • 优化前:月均咨询量35个,主要依赖付费广告
  • 优化5个月后:月均咨询量180个,自然流量占比65%
  • 效果提升:咨询量增长414%,营销成本降低57%

为什么选择我们的SEO服务

专业团队

  • 10年以上SEO经验专家带队
  • 百度、Google认证工程师
  • 内容创作、技术开发、数据分析多领域团队
  • 持续培训保持技术领先

数据驱动

  • 自主研发SEO分析工具
  • 实时排名监控系统
  • 竞争对手深度分析
  • 效果可视化报告

透明合作

  • 清晰的服务内容和价格
  • 定期进展汇报和沟通
  • 效果数据实时可查
  • 灵活的合同条款

我们的SEO服务理念

我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。

提交需求或反馈

Demand feedback