infoq的博客发布界面也是非常简洁的。首页就只有基本的标题,内容和封面图片,所以infoq的实现也相对比较简单。
一起来看看吧。
前提条件当然是先下载 blog-auto-publishing-tools这个博客自动发布工具,地址如下:https://github.com/ddean2009/blog-auto-publishing-tools
接下来我会带领大家一步步实现infoq的博客自动发布。
infoq的上传封面底层是一个input标签:
image-20240507210315786
这个是可以通过selenium来实现的。
我们先找到这个input标签,然后调用send_keys即可实现图片的上传:
# 上传封面
if 'image' in front_matter and front_matter['image']:
file_input=driver.find_element(By.XPATH, "//input[@type='file']")
# 文件上传不支持远程文件上传,所以需要把图片下载到本地
file_input.send_keys(download_image(front_matter['image']))
time.sleep(2)
这里要注意的是,要上传的封面是放在markdown的最上面yaml front matter里面的。
如图所示:
image-20240507154807745
另外要注意的是,因为博客的上传功能只支持本地上传,所以如果你的image是远程地址的话,需要先把远程图片现在到本地,然后再用本地图片来上传。
下载图片到本地的代码这里就不写了。
感兴趣的朋友可以直接去看我的代码。
infoq的文章标题没有ID,这样的话我们就需要通过xpath来定位文章标题。
一般来说标题的地方都有placeholder,所以我们可以通过xpath来定位到标题:
# 文章标题
title=driver.find_element(By.XPATH, '//input[@placeholder="请输入标题"]')
title.clear()
if 'title' in front_matter['title'] and front_matter['title']:
title.send_keys(front_matter['title'])
else:
title.send_keys(common_config['title'])
time.sleep(2) # 等待3秒
之前有提到segmentfault和oschina用的是codemirror,而infoq用的是ProseMirror。
这种动态富文本编辑器会根据你的输入动态修改html内容。所以没办法像textArea那样直接获取元素之后设置他的内容。
这里我们只能采用拷贝粘贴的方式来设置。
怎么定位到文章内容框呢?
因为我们现在刚刚输入完文章标题。所以只需要输入两次tab键就可以把鼠标定位到文章内容输入框了。
所以,我们的代码如下:
# 文章内容 markdown版本
file_content=read_file_with_footer(common_config['content'])
# 用的是CodeMirror,不能用元素赋值的方法,所以我们使用拷贝的方法
cmd_ctrl=Keys.COMMAND if sys.platform=='darwin' else Keys.CONTROL
# 将要粘贴的文本内容复制到剪贴板
pyperclip.copy(file_content)
action_chains=webdriver.ActionChains(driver)
# tab
action_chains.key_down(Keys.TAB).key_up(Keys.TAB).perform()
time.sleep(2)
# 模拟实际的粘贴操作
action_chains.key_down(cmd_ctrl).send_keys('v').key_up(cmd_ctrl).perform()
time.sleep(3) # 等待3秒
点击发布文章按钮,这个比较简单,直接根据class的名字获取到对应的元素即可:
# 发布文章
send_button=driver.find_element(By.XPATH, '//div[contains(@class, "submit-btn")]')
send_button.click()
time.sleep(2)
点完发布文章按钮,会出现一个弹出框,在弹出框里面可以设置摘要和标签等信息。
摘要部分是一个textarea,我们可以通过xpath的方式定位到它:
if summary:
summary_input=driver.find_element(By.XPATH, '//div[@class="summary"]/textarea')
summary_input.clear()
summary_input.send_keys(summary)
time.sleep(2)
标签是一个input,这里我们也是通过xpath来定位:
if tags:
for tag in tags:
tag_input=driver.find_element(By.XPATH, '//div[@class="search-tag"]//input')
tag_input.send_keys(tag)
time.sleep(1)
tag_input.send_keys(Keys.ENTER)
在设置标签的过程中,每设置完成一个,我们就按一下回车,接下来就可以设置下一个标签了。
非常的方便。
最后的最后,我们就可以真正的点击提交按钮了。
if auto_publish:
publish_button=driver.find_element(By.XPATH, '//div[@class="dialog-footer-buttons"]/div[contains(text(),"确定")]')
publish_button.click()
这个提交按钮不是很好定位,我们只能通过div的class和text来找到提交按钮。
infoq的界面看起来比较简单,但是实现过程中还是有一些要注意的事项。
大家在实现的过程中需要留意。
点我查看更多精彩内容:www.flydean.com
家好鸭,又是一年开学季。今天为大家带来一篇教程《如何搭建个人博客网站》,喜欢的同学可以研究一下。
前期准备:
1、一台云服务器
2、一个域名
3、一个博客网站模板
主要涉及知识点:linux基础命令,mysql基础操作
步骤
1、 服务器搭建
购买一台网络云服务器,可以考虑阿里云、腾讯云、百度云等,这里以阿里云服务器举例。
共享型价格在半年170元左右。不定期会有活动,首台半价等。
系统配置CentOs6.8系统
可在管理控制台查看配置购买的服务器
PS:腾讯云学生活动10元/月(服务器加存储加域名)
2、网络环境部署
购买完成后,在管理端后台更多设置里修改远程登录密码
重置密码是重置远程登录之后服务器的密码(用户名root)
两个都修改完成后就可以远程连接服务器啦
在安全组里添加访问规则,允许80,22端口访问
1)安装apache服务器
首先执行yum install httpd httpd-devel
需要确认的,填yes,以下同样
启动apache执行: /etc/init.d/httpd start
2)安装mysql服务
执行:yum install mysql mysql-server
启动mysql:/etc/init.d/mysql start
3)安装php
yum -y install php
4)安装php拓展
执行:yum -y install php-mysql php-gd php-imap php-ldap php-odbc php-mbstring php-devel php-soap php-cli php-pdo
yum -y install php-mcrypt php-tidy php-xml php-xmlrpc php-pear
yum -y install php-pecl-memcache php-eaccelerator
然后重启httpd服务 service httpd restart
然后进入默认网站目录cd /var/www/html/
然后touch index.php
然后编辑一下添加如下php代码:
<?php
phpinfo();
?>
然后在浏览器输入你的服务器公网ip地址就可以看到如下页面哟,首先确认你的防火墙已经全部关闭了哦.
防火墙关闭命令
service iptables stop
然后关闭防火墙的开机启动chkconfig iptables off
同时开启httpd和mysql的开启启动
Chkconfig httpd on
Chkconfig mysqld on
接下来就可以去wordpress下载源码包了.
3、网站部署
1) 下载WordPress安装包,上传到服务器
这是我下载的wordpress安装包,上传工具使用的是FileZilla Client
运行FileZilla Client,输入地址,账号,远程登录密码,端口22,快速连接
也可以通过文件>站点管理器>新建站点添加
连接成功后,将下载的wordpress压缩吧拖到右边/var/www/html文件夹下
好的上传完毕。
2) 解压安装包,配置wordpress
好的看到我们的源码包了,现在来解压他.
发现没有解压命令,我们来安装一下.
执行:yum install zip
执行:yum install unzip
安装完成后,我们来解压缩wordpress
进入/var/www/html目录
执行:cd /var/www/html
解压缩安装包:unzip –x 安装包名称
这就解压完毕了
这样咱们就只剩下安装了.
3)安装wordpress程序
进入mysql为wordpress创建一个数据库
执行:mysql -u root –p
需要创建数据库密码
执行:SET PASSWORD FOR 'root'@'localhost'=PASSWORD('新密码')
创建数据库执行:create database wordpress;
在网页上输入公网地址,进入wordpress配置页面,填写好如下表单
发现我们不能安装,
因为没有写权限,添加权限即可
在服务器上执行:cd /var/www/
chmod –R 777 html
再回到网页,刷新
这样就安装好了.
这样你就可以进入你的博客,写你的文章了.
至此,安装完成,WordPress里面有很多模板,可以直接更改你博客的主题风格,十分方便。
如果你想把网站挂出来让朋友来访问,那么你就还需要最后一步,去云购买一个域名,进行一下地址解析。
在国内的版权意识越来越强,特别是一些做原创博客的站长们。自己辛辛苦苦写出来的东西,被别人鼠标点几下,就复制走了。有些自觉的复制者们都会带上文章的网站链接,但是大多数的复制者们,都把文章当成自己的了,连个链接也不给。
今天教大家一个,别人复制网站的内容,并自动追加来源地址的方法。
javascript 代码
<script> document.addEventListener('copy', function (event) { if (typeof window.getSelection=="undefined") return; //IE8 or earlier... var body_element=document.getElementsByTagName('body')[0]; var selection=window.getSelection(); //判断复制的内容的长度是否大于30 //如果不大于 30 ,则不追加内容 if (("" + selection).length < 30) return; var newdiv=document.createElement('div'); newdiv.style.position='absolute'; newdiv.style.left='-99999px'; body_element.appendChild(newdiv); newdiv.appendChild(selection.getRangeAt(0).cloneContents()); if (selection.getRangeAt(0).commonAncestorContainer.nodeName=="PRE") { newdiv.innerHTML="<pre>" + newdiv.innerHTML + "</pre>"; } // 追加的HTML代码 // newdiv.innerHTML +="<br />原文地址: <a href='"+ document.location.href + "'>"+ document.location.href + "</a> ? Feiniaomy.com"; // 追加的TXT文字 newdiv.innerHTML +="\r\n原文地址:"+ document.location.href + "\r\n ? Feiniaomy.com"; selection.selectAllChildren(newdiv); window.setTimeout(function () { body_element.removeChild(newdiv); }, 200); }); </script>
测试,复制网站内容后,会追加以下内容
原文地址:https://www.feiniaomy.com/post/1.html ? Feiniaomy.com
*请认真填写需求信息,我们会在24小时内与您取得联系。