首页 > 解决方案 > 使用命令行的 Python 计划

问题描述

我有这个问题,我想自动化一个脚本。在通过的项目中,我为此使用了 python 调度程序。但是对于这个项目,我不确定如何处理。

问题是代码使用代码之外的登录详细信息,并在启动脚本时在命令行中输入。

前任。python scriptname.py email@youremail.com 密码

如何使用 python 调度程序自动执行此操作?'scriptname.py' 中的代码是:

//LinkedBot.py
import argparse, os, time
import urlparse, random
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup

def getPeopleLinks(page):
    links = []
    for link in page.find_all('a'):
        url = link.get('href')
        if url:
            if 'profile/view?id=' in url:
                links.append(url)
    return links

def getJobLinks(page):
    links = []
    for link in page.find_all('a'):
        url = link.get('href')
        if url:       
            if '/jobs' in url:
                links.append(url)
    return links

def getID(url):
    pUrl = urlparse.urlparse(url)
    return urlparse.parse_qs(pUrl.query)['id'][0]


def ViewBot(browser):
    visited = {}
    pList = []
    count = 0
    while True:
        #sleep to make sure everything loads, add random to make us look human.
        time.sleep(random.uniform(3.5,6.9))
        page = BeautifulSoup(browser.page_source)
        people = getPeopleLinks(page)
        if people:
            for person in people:
                ID = getID(person)
                if ID not in visited:
                    pList.append(person)
                    visited[ID] = 1
        if pList: #if there is people to look at look at them
            person = pList.pop()
            browser.get(person)
            count += 1
        else: #otherwise find people via the job pages
            jobs = getJobLinks(page)
            if jobs:
                job = random.choice(jobs)
                root = 'http://www.linkedin.com'
                roots = 'https://www.linkedin.com'
                if root not in job or roots not in job:
                    job = 'https://www.linkedin.com'+job
                browser.get(job)
            else:
                print "I'm Lost Exiting"
                break

        #Output (Make option for this)           
        print "[+] "+browser.title+" Visited! \n("\
            +str(count)+"/"+str(len(pList))+") Visited/Queue)"


def Main():
    parser = argparse.ArgumentParser()
    parser.add_argument("email", help="linkedin email")
    parser.add_argument("password", help="linkedin password")
    args = parser.parse_args()

    browser = webdriver.Firefox()

    browser.get("https://linkedin.com/uas/login")


    emailElement = browser.find_element_by_id("session_key-login")
    emailElement.send_keys(args.email)
    passElement = browser.find_element_by_id("session_password-login")
    passElement.send_keys(args.password)
    passElement.submit()

在 OSX 上运行它。

标签: pythoncommand-linescheduler

解决方案


我可以看到至少有两种不同的方式来自动触发你的脚本。既然您提到您的脚本是以这种方式启动的:

python scriptname.py email@youremail.com password

这意味着您从 shell 启动它。当您想安排它时,听起来 Crontab 是一个完美的答案。(例如见https://kvz.io/blog/2007/07/29/schedule-tasks-on-linux-using-crontab/ )

如果你真的想使用python调度器,你可以使用子进程。

在使用 python 调度程序的文件中:

import subprocess

subprocess.call("python scriptname.py email@youremail.com password", shell=True)

从另一个 Python 脚本调用 Python 脚本的最佳方法是什么?


推荐阅读