将图像/文档作为问题附件上载到Github
ghuc的Python项目详细描述
GHUC
ghuc
(派生自githubusercontent
并发音为gee·huck)是一个命令行工具,用于将图像/文档作为问题附件上载到github。图像可以在https://user images.githubusercontent.com
上找到,文档可以在https://github.com/<;user>;/<;repo>;/files/..
上找到。它自动化了传统的导航到回购的流程->;打开问题->;上载图像->;复制URL,这非常麻烦。随着imgur的不断恶化,一站式上传到user-images.githubusercontent.com对于偶尔嵌入在文档或评论部分/论坛帖子中的图片来说是次好的选择。
ghuc
部分由selenium webdriver提供动力。在MacOS、Linux和Windows上测试和支持。
请尊重Github的TOS,不要滥用此工具。
内容
安装
pip install ghuc
建议通过pipx单独安装。
非python依赖项
由于ghuc
使用selenium webdriver,因此需要以下浏览器和驱动程序组合之一:
- Firefox的
geckodriver
; - chrome/chromium使用chromedriver
可选依赖项
libmagic
是准确检测mime类型所必需的;否则,将根据文件扩展名猜测mime类型。
用法
$ ghuc -h usage: ghuc [-h] [-r REPOSITORY_ID] [-x PROXY] [-q] [--debug] [--gui] [--container] [--version] PATH [PATH ...]Uploads images/documents to GitHub as issue attachments. Seehttps://github.com/zmwangx/ghuc for detailed documentation.positional arguments: PATHoptional arguments: -h, --help show this help message and exit -r REPOSITORY_ID, --repository-id REPOSITORY_ID id of repository to upload from (defaults to 1) -x PROXY, --proxy PROXY HTTP or SOCKS proxy -q, --quiet set logging level to ERROR --debug set logging level to DEBUG --gui disable headless mode when running browser sessions through Selenium WebDriver --container add extra browser options to work around problems in containers --version show program's version number and exit
注意:
github并不支持所有文件类型。在编写以下内容时,我引用支持:
< Buff行情>gif,jpeg,jpg,png,docx(真的吗?)、gz、log、pdf、pptx、txt、xlsx和zip。
第一次使用
ghuc
时,系统将提示您输入github凭据以登录(请参见它的工作原理;您可以使用下面记录的环境变量来绕过交互式提示)。你r cookies将被缓存,但您的凭据永远不会被存储。随后的运行可能会每隔一段时间给github打一次电话以获取新的令牌,但理想情况下,您不需要再次登录。--repository id
:确定上载文档的url显示为哪个repo。例如,在默认的1
下,url可以是https://github.com/mojombo/grit/files/3027504/random.pdf;当设置为36502
时,您可以改为使用https://github.com/git/git/files/3027505/random.pdf" rel="nofollow">https://github.com/git/git/files/3027505/random.pdf。只要id中存在存储库,此选项就是示意性的。据我所知,此选项对图像上载没有影响。--代理
:支持http和socks(4/4a/5/5h)代理,即识别以下协议前缀:http://
,https://
,socks4://
,socks4a://
,socks5://
,socks5h://
。如果未指定协议,则假定为http://。也可以使用https\u proxy
环境变量。--gui
和--container
:这些主要是开发/测试选项;最终用户不需要触摸它们。--对于最终用户系统来说,容器可能尤其不安全。
环境变量
github_username
,github_password
和github_totp_secret
:提供凭据时,不显示交互提示。github_totp_secret
仅在使用totp进行双因素身份验证时才需要。如果只对2fa使用文本消息(非常不鼓励),则登录流可能工作,但不能保证(因为我没有这样的设置;欢迎使用贡献)。如果你只在2fa中使用fido u2f,那你就倒霉了。https\u proxy
:请参见--proxy
工作原理
将文件作为问题附件上载需要两个级别的身份验证:github会话cookies和一个uploadPolicyAuthentityToken
(csrf排序令牌)。uploadPolicyAuthentityToken
在登录时可以在任何带有注释框的GitHub页面上找到,并且每个注释框都有效一段时间(如果没有专门的测试,很难说有多长,但有效期至少超过一天)。
ghuc
通过selenium webdriver登录github,缓存会话cookie和令牌。然后,它使用缓存的值执行所有上载,并且在令牌过期之前不再接触浏览器(因此正常上载应该相当快),此时它会尝试还原以前的浏览器会话并获取新令牌。
FAQ
为什么不是木偶师?< /P>
从开发人员的角度来看,puppeter比selenium webdriver灵活得多,但是每次安装都必须下载一个捆绑的、大约100MB的、非自动更新的chromium副本,而下次使用chromium时它已经过时了,这对用户来说真的很不利。我也不是node/npm生态系统的粉丝。最后,同步对这个项目是有好处的。
待办事项
- selenium调用中的尊重代理选项(当前浏览器使用系统代理设置);
- 页面加载:等待
domcontentloaded
而不是loade
(selenium默认值,在慢速连接上浪费大量时间); - 处理身份验证失败并允许重试(目前我们假定所有凭据都正确)。
许可证
版权所有©2019 Zhiming Wangi@zhimmingwang.org。麻省理工学院的执照。