def input_board_text(browser, logger, board_name, cr_bo_success, send_keys=1): input_board_XP = '//input[@id="boardEditName"]' input_board_flag = explicit_wait(browser, logger, "VOEL", [input_board_XP, "XPath"], 15, False) if input_board_flag: time.sleep(3) if send_keys == 1: browser.find_element_by_xpath(input_board_XP).send_keys(board_name) time.sleep(1) create_button = browser.find_element_by_xpath( "//button/div[contains(text(),'Create')]") (ActionChains(browser).move_to_element( create_button).click().perform()) create_error_XP = '//*[starts-with(text(), "Could not save board")]' create_error_flag = explicit_wait(browser, logger, "VOEL", [create_error_XP, "XPath"], 5, False) if create_error_flag: logger.info('Board already existed!') cr_bo_success = 0 else: cr_bo_success = 0 return cr_bo_success
def bind_card_in_normal_process(): # 绑卡 # if created_flag == 1 and step_flag == 1: # if login_separately == 1: # login_flag = login_paypal(driver, email, paypal_pwd) # if login_flag == 1: # created_flag = link_card( # driver, conn, email, card_num, expiration_date, card_csc) # login_separately = 0 # else: next_step_page_XP = '//div[@class="formLink "]//button' next_step_page_flag = explicit_wait(driver, "VOEL", [next_step_page_XP, "XPath"], 15, False) if next_step_page_flag: next_step_page = driver.find_element_by_xpath(next_step_page_XP) (ActionChains(driver).move_to_element( next_step_page).click().perform()) step_flag = 1 else: step_flag = 0 if step_flag == 1: input_cardNumber_XP = '//input[@id="cardData_cardNumber"]' input_cardNumber_flag = explicit_wait(driver, "VOEL", [input_cardNumber_XP, "XPath"], 15, False) if input_cardNumber_flag: driver.find_element_by_xpath(input_cardNumber_XP).send_keys( card_num) time.sleep(1) driver.find_element_by_id('cardData_expiryDate').send_keys( expiration_date) time.sleep(1) driver.find_element_by_id('cardData_csc').send_keys(card_csc) time.sleep(1) driver.find_element_by_xpath( '//div[@class="btnGrp"]/button').click() time.sleep(5) while True: end_flag = '' try: end_flag = driver.find_element_by_xpath('//form//h1').text print(end_flag) except: pass if end_flag == 'Your account’s ready to use! Shop, send money, and more with PayPal': sql = 'UPDATE email_info set created_paypal_account=2 where email=%s' commit_sql(conn, sql, email) time.sleep(1) created_flag = 2 print('Successful!') step_flag = 1 break else: time.sleep(3) else: step_flag = 0
def create_board(browser, logger, conn, homefeed_url, account_id, create_board_num): sql = "SELECT home_page FROM account WHERE id=%s" result = conn.op_select_one(sql, account_id) if result: boards_page = result['home_page'] + 'boards' sql = "SELECT board_name FROM board_template ORDER BY RAND() LIMIT %s" results = conn.op_select_all(sql, create_board_num) for board_echo in results: cr_bo_success = 1 board_name = board_echo['board_name'] logger.info('Boardname', board_name) browser.get(boards_page) # 个人账号按钮 display_add_XP = "//body//div[@id='__PWS_ROOT__']//div//div//div[3]//div[2]//div[1]//div[1]//button[1]" display_add_flag = explicit_wait(browser, logger, "VOEL", [display_add_XP, "XPath"], 30, False) if display_add_flag: browser.find_element_by_xpath(display_add_XP).click() create_button_XP = '//div[@data-test-id="Create board"]' create_button_flag = explicit_wait(browser, logger, "VOEL", [create_button_XP, "XPath"], 30, False) if create_button_flag: browser.find_element_by_xpath(create_button_XP).click() else: cr_bo_success = 0 else: # 商业账号按钮 try: browser.find_element_by_xpath( "//body/div[@id='__PWS_ROOT__']/div/div/div/div/div/div/div/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]" ).click() except: cr_bo_success = 0 if cr_bo_success == 1: cr_bo_success = input_board_text(browser, board_name, cr_bo_success) try: browser.find_element_by_xpath( '//button[@aria-label="Done"]').click() time.sleep(1) except: pass if cr_bo_success == 1: sql = "UPDATE account SET created_boards=created_boards+1 WHERE id=%s" conn.op_commit(sql, account_id) write_txt_time() browser.get(homefeed_url)
def login(driver, login_url, account_id, email, pwd, cookie): # if cookie: # login_state = cookie_login(driver, login_url, cookie) # else: # login_state = 0 # if login_state == 0: driver.get(login_url) if driver.page_source.find('This site can’t be reached') > -1: login_state = 2 print('Net error!') return login_state elif driver.page_source.find("This page isn’t working") > -1: login_state = 2 print('Net error!') return login_state else: input_email_XP = '//input[@id="email"]' input_email_flag = explicit_wait(driver, "VOEL", [input_email_XP, "XPath"], 15, False) if input_email_flag: driver.find_element_by_xpath(input_email_XP).send_keys(email) time.sleep(1) driver.find_element_by_name("password").send_keys(pwd) time.sleep(1) driver.find_element_by_xpath("//form//button").click() # login_success_XP = '//div[@class="pinWrapper"]' login_success_XP = '//div[text()="Home"]' login_success_flag = explicit_wait(driver, "VOEL", [login_success_XP, "XPath"], 15, False) if login_success_flag: login_state = 11 else: reset_passwd_XP = '//button[@aria-label="Reset password"]' reset_passwd_flag = explicit_wait(driver, "VOEL", [reset_passwd_XP, "XPath"], 5, False) if reset_passwd_flag: print('Error code: 9') login_state = 9 elif driver.page_source.find( 'The email you entered does not belong to any account.' ) > -1: print('Error code: 66') login_state = 66 elif driver.page_source.find( 'Your account has been suspended') > -1: print('Error code: 99') login_state = 99 else: login_state = 0 else: login_state = 0 return login_state
def cookie_login(driver, login_url, cookie): driver.get(login_url) print('Cookie login...') # clear cookies, To prevent the automatic login to other accounts driver.delete_all_cookies() time.sleep(2) try: cookies = json.loads(cookie) for coo in cookies: coo.pop('domain') driver.add_cookie(coo) driver.refresh() except Exception as e: print('The cookies is invalid. You are trying to login') login_state = 0 return login_state login_success_XP = '//div[@class="pinWrapper"]' login_success_flag = explicit_wait(driver, "VOEL", [login_success_XP, "XPath"], 15, False) if login_success_flag: login_state = 1 else: login_state = 0 return login_state
def create_board(driver, conn, homefeed_url, account_id, create_board_num): sql = "SELECT home_page FROM account WHERE id=%s" result = conn.op_select_one(sql, account_id) if result: home_page = result['home_page'] + 'boards' sql = "SELECT board_name FROM board_template ORDER BY RAND() LIMIT %s" results = conn.op_select_all(sql, create_board_num) for board_echo in results: cr_bo_success = 1 board_name = board_echo['board_name'] print('Boardname', board_name) driver.get(home_page) display_add_XP = '//button[@aria-label="Profile actions overflow"]' display_add_flag = explicit_wait(driver, "VOEL", [display_add_XP, "XPath"], 15, False) if display_add_flag: driver.find_element_by_xpath(display_add_XP).click() create_button_XP = '//div[text()="Create board"]' create_button_flag = explicit_wait(driver, "VOEL", [create_button_XP, "XPath"], 15, False) if create_button_flag: driver.find_element_by_xpath(create_button_XP).click() else: cr_bo_success = 0 else: try: driver.find_element_by_xpath( '//div[@data-test-id="createBoardCard"]').click() except: cr_bo_success = 0 if cr_bo_success == 1: cr_bo_success = input_board_text(driver, board_name, cr_bo_success) if cr_bo_success == 1: sql = "UPDATE account SET created_boards=created_boards+1 WHERE id=%s" conn.op_commit(sql, account_id) write_txt_time() driver.get(homefeed_url)
def follow(driver, conn, homefeed_url, step_flag, account_id, follow_num): print('Turn on the follow function, count:', follow_num) sql = 'SELECT COUNT(1) AS all_count FROM follow_history WHERE follow_id=%s' follow_count = conn.op_select_one(sql, account_id)['all_count'] if follow_count < 2: sql = 'SELECT * FROM account WHERE home_page IS NOT NULL ORDER BY RAND() LIMIT %s' results = conn.op_select_all(sql, follow_num) if results: for res in results: user_id = res['id'] home_url = res['home_page'] sql = 'SELECT * FROM follow_history WHERE user_id=%s AND follow_id=%s' judge_exist = conn.op_select_one(sql, (user_id, account_id)) if judge_exist: print('Already followed!') else: try: driver.get(home_url) except: pass time.sleep(5) follow_XP = '//div[@class="fixedHeader"]//div[3]//div[2]/button/div' follow_flag = explicit_wait(driver, "VOEL", [follow_XP, "XPath"], 5, False) if follow_flag: follow_state = driver.find_element_by_xpath( follow_XP).text if follow_state == 'Follow': try: driver.find_element_by_xpath( '//div[@class="fixedHeader"]//div[3]//div[2]/button' ).click() time.sleep(1) except: pass else: try: follow_state = driver.find_element_by_xpath( '//div[@class="CreatorFollowButton step0"]//div[2]/div' ).text if follow_state == 'Follow': driver.find_element_by_xpath( '//div[@class="CreatorFollowButton step0"]/div/div/div/div' ).click() time.sleep(1) except: pass sql = 'INSERT INTO follow_history (user_id, follow_id) VALUES (%s, %s)' conn.op_commit(sql, (user_id, account_id)) write_txt_time() driver.get(homefeed_url) else: print('Do not need follow!')
def paypal_personal_page_two(): input_address_XP = '//div[@data-label-content="Street address"]//input' input_address_flag = explicit_wait(driver, "VOEL", [input_address_XP, "XPath"], 20, False) if input_address_flag: driver.find_element_by_xpath(input_address_XP).send_keys(address) time.sleep(1) driver.find_element_by_id('paypalAccountData_city').send_keys(city) time.sleep(1) Select(driver.find_element_by_id( "paypalAccountData_state")).select_by_value(state) time.sleep(1) driver.find_element_by_id('paypalAccountData_zip').send_keys(zip_num) time.sleep(1) driver.find_element_by_id('paypalAccountData_phone').send_keys( phone_num) time.sleep(1) driver.find_element_by_xpath( '//div[@class="signupCheckBox"]//label').click() time.sleep(1) driver.find_element_by_xpath('//div[@class="btnGrp"]/button').click() time.sleep(5) info_error = '' try: info_error = driver.find_element_by_xpath( '//div[@class="notification"]//span').text except: pass if info_error: step_flag = 0 print('Info Error!') sql = 'UPDATE email_info set emailIsUsed=9 where email=%s' commit_sql(conn, sql, email) else: step_flag = 1 sql = 'UPDATE email_info set paypal_pwd=%s, created_paypal_account=1 where email=%s' commit_sql(conn, sql, (paypal_pwd, email)) created_flag = 1 try_set_up = 0 while True: set_up_profile = '' try: set_up_profile = driver.find_element_by_xpath( '//a[@name="notnow"]') except: pass if set_up_profile: set_up_profile.click() time.sleep(3) break else: try_set_up += 1 time.sleep(3) if try_set_up > 2: break else: step_flag = 0
def activate(driver, email, paypal_pwd, step_flag): input_password_XP = '//input[@id="password"]' input_password_flag = explicit_wait(driver, "VOEL", [input_password_XP, "XPath"], 30, False) if input_password_flag: time.sleep(8) driver.find_element_by_xpath(input_password_XP).send_keys(paypal_pwd) time.sleep(1) driver.find_element_by_xpath('//button[@id="btnLogin"]').click() time.sleep(1) not_now_button_XP = '//p[@class="secondaryLink"]/a' not_now_button_flag = explicit_wait(driver, "VOEL", [not_now_button_XP, "XPath"], 10, False) if not_now_button_flag: not_now_button = driver.find_element_by_xpath(not_now_button_XP) (ActionChains(driver).move_to_element( not_now_button).click().perform()) else: try_times = 0 while True: msg_code = '' try: msg_code = driver.find_element_by_xpath( '//form/div[1]/p').text except: pass if msg_code == 'Your email is all set!': # Not now driver.find_element_by_xpath( '//button[@id="/appData/action"]').click() break else: try_times += 1 time.sleep(3) if try_times > 5: step_flag = 0 break else: step_flag = 0 return step_flag
def random_browsing(browser, logger, conn, homefeed_url, account_id, process_flag, save_pic_control, browsing_pic_min, browsing_pic_max, board_name='like'): random_browsing_num = random.randint(browsing_pic_min, browsing_pic_max) logger.info('Start random browsing:', random_browsing_num, 'time') for i in range(random_browsing_num): web_pin_arr_XP = '//div[@data-grid-item="true"]' web_pin_arr_flag = explicit_wait(browser, logger, "VOEL", [web_pin_arr_XP, "XPath"], 10, False) if web_pin_arr_flag: web_pin_arr = browser.find_elements_by_xpath(web_pin_arr_XP) click_num = random.randint(1, 8) web_pin_num = 1 for web_pin_one in web_pin_arr: if web_pin_num == click_num: time.sleep(3) web_pin_one.click() logger.info('Start the', i + 1, 'browsing') time.sleep(5) try: close_AD_page(browser) except Exception as e: if save_pic_control == 1 and (i + 1) % 2 == 0: save_pic(browser, conn, homefeed_url, account_id, process_flag, send_keys=0) win32api.keybd_event(27, 0, 0, 0) win32api.keybd_event(27, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(3) win32api.keybd_event(35, 0, 0, 0) win32api.keybd_event(35, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(5) break else: web_pin_num += 1 write_txt_time() else: process_flag = 0
def paypal_personal_send_email_again(driver, step_flag): print('Send email again!') try: driver.find_element_by_xpath('//div[@class="myAccount"]/a').click() time.sleep(3) except: pass email_flag_XP = '//a[@data-name="confirm_your_email"]' email_flag_exist = explicit_wait(driver, "VOEL", [email_flag_XP, "XPath"], 30, False) if email_flag_exist: email_flag = driver.find_element_by_xpath(email_flag_XP) (ActionChains(driver).move_to_element(email_flag).click().perform()) click_send_button_XP = '//button[@id="js_unconfirmedEmail"]' click_send_button_flag = explicit_wait(driver, "VOEL", [click_send_button_XP, "XPath"], 30, False) if click_send_button_flag: click_send_button = driver.find_element_by_xpath( click_send_button_XP) (ActionChains(driver).move_to_element( click_send_button).click().perform()) else: driver.refresh() click_send_button_XP = '//button[@id="js_unconfirmedEmail"]' click_send_button_flag = explicit_wait( driver, "VOEL", [click_send_button_XP, "XPath"], 30, False) if click_send_button_flag: click_send_button = driver.find_element_by_xpath( click_send_button_XP) (ActionChains(driver).move_to_element( click_send_button).click().perform()) else: step_flag = 0 if step_flag == 1: time.sleep(10) paypal_confirm_url = get_confirm_email(email, email_pwd) else: step_flag = 0 return paypal_confirm_url
def paypal_here_page_one(driver, step_flag, firstname, lastname, email, paypal_pwd, login_with_input_box=False): if login_with_input_box: sign_or_log_XP = '//button[@id="pphLoginButton"]' step_flag = 2 else: sign_or_log_XP = '//a[text()="Sign Up"]' sign_or_log_flag = explicit_wait(driver, "VOEL", [sign_or_log_XP, "XPath"], 15, False) if sign_or_log_flag: driver.find_element_by_xpath(sign_or_log_XP).click() if step_flag == 1: input_firstname_XP = '//input[@id="firstName"]' input_firstname_flag = explicit_wait(driver, "VOEL", [input_firstname_XP, "XPath"], 15, False) if input_firstname_flag: driver.find_element_by_xpath(input_firstname_XP).send_keys( firstname) time.sleep(1) driver.find_element_by_xpath( '//input[@id="lastName"]').send_keys(lastname) time.sleep(1) driver.find_element_by_xpath('//input[@id="email"]').send_keys( email) time.sleep(1) driver.find_element_by_xpath( '//input[@id="password"]').send_keys(paypal_pwd) time.sleep(1) driver.find_element_by_xpath( '//button[@id="continueButton"]').click() else: step_flag = 0 else: step_flag = 0 return step_flag
def paypal_here_send_email_again(driver, step_flag): driver.get('https://www.paypal.com/businessprofile/settings/email') email_edit_XP = '//span[@class="links"]//a[1]' email_edit_flag = explicit_wait(driver, "VOEL", [email_edit_XP, "XPath"], 10, False) if email_edit_flag: driver.find_element_by_xpath(email_edit_XP).click() email_confirm_XP = '//a[@class="confirm"]' email_confirm_flag = explicit_wait(driver, "VOEL", [email_confirm_XP, "XPath"], 10, False) if email_confirm_flag: driver.find_element_by_xpath(email_confirm_XP).click() time.sleep(5) paypal_confirm_url = get_confirm_email(email, email_pwd) step_flag = 0 else: step_flag = 0 return paypal_confirm_url
def input_board_text(driver, board_name, cr_bo_success): input_board_XP = '//input[@id="boardEditName"]' input_board_flag = explicit_wait(driver, "VOEL", [input_board_XP, "XPath"], 15, False) if input_board_flag: driver.find_element_by_xpath(input_board_XP).clear() time.sleep(1) driver.find_element_by_xpath(input_board_XP).send_keys(board_name) time.sleep(1) create_button = driver.find_element_by_xpath( '//form//button[@type="submit"]') (ActionChains(driver).move_to_element(create_button).click().perform()) create_error_XP = '//*[starts-with(text(), "Could not save board")]' create_error_flag = explicit_wait(driver, "VOEL", [create_error_XP, "XPath"], 5, False) if create_error_flag: print('Board already existed!') cr_bo_success = 0 else: cr_bo_success = 0 return cr_bo_success
def login_paypal(driver, email, paypal_pwd): input_email_XP = '//input[@id="email"]' input_email_flag = explicit_wait(driver, "VOEL", [input_email_XP, "XPath"], 15, False) if input_email_flag: driver.find_element_by_xpath(input_email_XP).send_keys(email) time.sleep(1) try: driver.find_element_by_id('btnNext').click() except: pass input_password_XP = '//input[@id="password"]' explicit_wait(driver, "VOEL", [input_password_XP, "XPath"]) driver.find_element_by_xpath(input_password_XP).send_keys(paypal_pwd) time.sleep(1) driver.find_element_by_id('btnLogin').click() time.sleep(3) try: driver.find_element_by_xpath( '//p[@class="secondaryLink"]/a').click() time.sleep(3) except: pass home_element_XP = '//a[text()="Summary"]' home_element_flag = explicit_wait(driver, "VOEL", [home_element_XP, "XPath"], 10, False) if home_element_flag: login_flag = 1 else: login_flag = 0 else: login_flag = 0 return login_flag
def link_card(driver, conn, email, card_num, expiration_date, card_csc, created_flag=1): link_button_XP = '//a[@id="bankCardLinkBankOrCard"]' explicit_wait(driver, "VOEL", [link_button_XP, "XPath"]) link_button = driver.find_element_by_xpath(link_button_XP) (ActionChains(driver).move_to_element(link_button).click().perform()) link_card_XP = '//a[@data-name="addCard"]' explicit_wait(driver, "VOEL", [link_card_XP, "XPath"]) link_card = driver.find_element_by_xpath(link_card_XP) (ActionChains(driver).move_to_element(link_card).click().perform()) next_element_XP = '//a[@data-name="linkManually"]' explicit_wait(driver, "VOEL", [next_element_XP, "XPath"]) next_element = driver.find_element_by_xpath(next_element_XP) (ActionChains(driver).move_to_element(next_element).click().perform()) cardNumber_XP = '//input[@id="cardNumber"]' explicit_wait(driver, "VOEL", [cardNumber_XP, "XPath"]) driver.find_element_by_xpath(cardNumber_XP).send_keys(card_num) time.sleep(1) driver.find_element_by_id('expDate').send_keys(expiration_date) time.sleep(1) driver.find_element_by_id('verificationCode').send_keys(card_csc) time.sleep(1) driver.find_element_by_name('detailsSubmit').click() time.sleep(5) try: driver.find_element_by_xpath('//a[@data-name="addCardDone"]').click() time.sleep(2) sql = 'UPDATE email_info set created_paypal_account=2 where email=%s' commit_sql(conn, sql, email) time.sleep(1) created_flag = 2 driver.find_element_by_xpath('//a[text()="Summary"]').click() time.sleep(3) except: pass return created_flag
def paypal_personal_page_one(): input_firstname_XP = '//input[@id="paypalAccountData_firstName"]' input_firstname_flag = explicit_wait(driver, "VOEL", [input_firstname_XP, "XPath"], 20, False) if input_firstname_flag: driver.find_element_by_xpath(input_firstname_XP).send_keys(firstname) time.sleep(1) driver.find_element_by_id('paypalAccountData_lastName').send_keys( lastname) time.sleep(1) driver.find_element_by_id('paypalAccountData_email').send_keys(email) time.sleep(1) driver.find_element_by_id('paypalAccountData_password').send_keys( paypal_pwd) time.sleep(2) # 确认密码 try: driver.find_element_by_id( 'paypalAccountData_confirmPassword').send_keys(paypal_pwd) time.sleep(1) except: pass try: error_code = driver.find_element_by_xpath('//form//p/span').text print(error_code) except: pass if error_code == 'It looks like you already signed up. Log in to your account.': print('Already signed up') sql = 'UPDATE email_info set created_paypal_account=-1 where email=%s' commit_sql(conn, sql, email) step_flag = 0 else: driver.find_element_by_xpath( '//div[@class="btnGrp"]/button').click() step_flag = 1 else: step_flag = 0 return step_flag
def save_home_url(driver, conn, account_id): home_page_XP = '//div[@aria-label="Saved"]/a' # home_page_XP = '//div[@data-test-id="button-container"]//div[3]/div/div[2]//a' home_page_flag = explicit_wait(driver, "VOEL", [home_page_XP, "XPath"], 10, False) if home_page_flag: home_page = driver.find_element_by_xpath(home_page_XP).get_attribute( 'href') if not home_page: try: home_page = driver.find_element_by_xpath( '//a[@data-test-id="businessName"]').get_attribute('href') if home_page: home_page = home_page.replace('pins/', '') except: try: home_button = driver.find_element_by_xpath( '//div[@data-test-id="button-container"]/div[3]') (ActionChains(driver).move_to_element( home_button).click().perform()) time.sleep(1) home_page = driver.find_element_by_xpath( '//div[@data-test-id="button-container"]/div[3]/div/div[2]//a' ).get_attribute('href') true_url = 'https://www.pinterest.com/' now_url = driver.current_url if now_url != true_url: driver.get(true_url) except: home_page = False if home_page: sql = 'UPDATE account SET home_page=%s WHERE id=%s' conn.op_commit(sql, (home_page, account_id))
def confirm_identity(conn, driver, email, confirm_info_id, confirm_user, confirm_pwd, routing_number, account_number, confirm_type): next_step = 1 search_bank_link_text = 0 accountNumberLast4 = account_number[-4:] click_bank_link_XP = '//a[@id="bankCardLinkBankOrCard"]' explicit_wait(driver, "VOEL", [click_bank_link_XP, "XPath"]) click_bank_link = driver.find_element_by_xpath(click_bank_link_XP) (ActionChains(driver).move_to_element(click_bank_link).click().perform()) add_bank_link_XP = '//a[@data-name="addBank"]' explicit_wait(driver, "VOEL", [add_bank_link_XP, "XPath"]) add_bank_link = driver.find_element_by_xpath(add_bank_link_XP) (ActionChains(driver).move_to_element(add_bank_link).click().perform()) click_bank_logo_XP = '//a[@name="manualAddBank"]' explicit_wait(driver, "VOEL", [click_bank_logo_XP, "XPath"]) click_bank_logo = driver.find_element_by_xpath(click_bank_logo_XP) (ActionChains(driver).move_to_element(click_bank_logo).click().perform()) input_routing_XP = '//input[@name="routingNumberGroup"]' explicit_wait(driver, "VOEL", [input_routing_XP, "XPath"]) if confirm_type == 'Savings': time.sleep(3) # driver.find_element_by_xpath('//label[@for="savingsRadioBtn"]').click() driver.find_element_by_xpath('//input[@id="savingsRadioBtn"]').click() time.sleep(2) driver.find_element_by_xpath(input_routing_XP).send_keys(routing_number) time.sleep(1) # Account Number driver.find_element_by_name('accountNumberInput').send_keys(account_number) time.sleep(1) add_bank_button_XP = '//button[@name="addBank"]' explicit_wait(driver, "VOEL", [add_bank_button_XP, "XPath"]) add_bank_button = driver.find_element_by_xpath(add_bank_button_XP) (ActionChains(driver).move_to_element(add_bank_button).click().perform()) time.sleep(5) try: driver.find_element_by_xpath(add_bank_button_XP).click() except: pass security_check = '' error_msg = '' try: security_check = driver.find_element_by_xpath( '//div[@class="challengesSection"]//h1').text except: pass time.sleep(2) try: error_msg = driver.find_element_by_xpath('//form/div[1]/p').text except: pass if security_check == 'Quick security check': sql = 'UPDATE email_info set confirm_identity=9 where email=%s' commit_sql(conn, sql, email) next_step = 0 elif error_msg: try: driver.find_element_by_name('addBank').click() except: pass if next_step == 1: pending_confirm_button_XP = '//button[@name="pendingConfirmBank"]' pending_confirm_button_state = explicit_wait( driver, "VOEL", [pending_confirm_button_XP, "XPath"], 10, False) if pending_confirm_button_state: pending_confirm_button = driver.find_element_by_xpath( pending_confirm_button_XP) (ActionChains(driver).move_to_element( pending_confirm_button).click().perform()) view_bank_button_XP = '//a[@data-name="viewBank"]' explicit_wait(driver, "VOEL", [view_bank_button_XP, "XPath"]) view_bank_button = driver.find_element_by_xpath( view_bank_button_XP) (ActionChains(driver).move_to_element( view_bank_button).click().perform()) confirm_instantly_XP = '//a[@name="confirmInstantly"]' explicit_wait(driver, "VOEL", [confirm_instantly_XP, "XPath"]) confirm_instantly = driver.find_element_by_xpath( confirm_instantly_XP) (ActionChains(driver).move_to_element( confirm_instantly).click().perform()) else: user_pwd_confirm_XP = '//div[@class="confirmBank-confirmInstantly"]/a' user_pwd_confirm_flag = explicit_wait( driver, "VOEL", [user_pwd_confirm_XP, "XPath"], 5, False) if user_pwd_confirm_flag: user_pwd_confirm = driver.find_element_by_xpath( user_pwd_confirm_XP) (ActionChains(driver).move_to_element( user_pwd_confirm).click().perform()) input_user_XP = '//form/div/div[1]/input' input_user_flag = explicit_wait(driver, "VOEL", [input_user_XP, "XPath"], 30, False) if input_user_flag: driver.find_element_by_xpath(input_user_XP).send_keys(confirm_user) time.sleep(1) driver.find_element_by_xpath('//form/div/div[3]/input').send_keys( confirm_pwd) time.sleep(1) driver.find_element_by_name('continue').click() else: next_step = 0 if next_step == 1: choice_account_number_XP = '//label[@for="accountNumber-%s"]' % accountNumberLast4 confirm_last_step = explicit_wait( driver, "VOEL", [choice_account_number_XP, "XPath"], 150, False) if confirm_last_step: choice_account_number = driver.find_element_by_xpath( choice_account_number_XP) (ActionChains(driver).move_to_element( choice_account_number).click().perform()) time.sleep(1) driver.find_element_by_name('continue').click() search_bank_link_text = 1 else: try: driver.find_element_by_name('continue').click() except: pass choice_account_number_XP = '//label[@for="accountNumber-%s"]' % accountNumberLast4 confirm_last_step = explicit_wait( driver, "VOEL", [choice_account_number_XP, "XPath"], 150, False) if confirm_last_step: choice_account_number = driver.find_element_by_xpath( choice_account_number_XP) (ActionChains(driver).move_to_element( choice_account_number).click().perform()) time.sleep(1) try: driver.find_element_by_name('continue').click() search_bank_link_text = 1 except: pass # print(search_bank_link_text) if search_bank_link_text == 1: confirm_success_XP = '//h2[text()="Bank linked!"]' success_flag = explicit_wait(driver, "VOEL", [confirm_success_XP, "XPath"], 20, False) if success_flag: sql = 'UPDATE email_info set confirm_identity=1, confirm_type=%s, confirmAccountNumber=%s where email=%s' commit_sql(conn, sql, (confirm_type, account_number, email)) print('Confirm Successsful!') sql = 'UPDATE paypal_confirm_info set used=2 where id=%s' commit_sql(conn, sql, confirm_info_id)
def paypal_here_page_two(driver, name, address, city, full_state, zip_num, birthdate, phone_num, ssn): choice_individual_XP = '//form//div[@id="businessType"]/div' choice_individual_flag = explicit_wait(driver, "VOEL", [choice_individual_XP, "XPath"], 10, False) if choice_individual_flag: choice_individual = driver.find_element_by_xpath(choice_individual_XP) (ActionChains(driver).move_to_element( choice_individual).click().perform()) time.sleep(2) win32api.keybd_event(40, 0, 0, 0) win32api.keybd_event(40, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(1) win32api.keybd_event(13, 0, 0, 0) win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(1) input_business_name_XP = '//input[@id="businessLegalName"]' input_business_name_flag = explicit_wait( driver, "VOEL", [input_business_name_XP, "XPath"], 5, False) if input_business_name_flag: driver.find_element_by_xpath(input_business_name_XP).send_keys( name) time.sleep(1) driver.find_element_by_xpath( '//input[@id="merchantCategoryCode"]').send_keys("women") win32api.keybd_event(40, 0, 0, 0) win32api.keybd_event(40, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(1) win32api.keybd_event(13, 0, 0, 0) win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(1) # driver.find_element_by_xpath( # '//form//div[@id="businessAverageMonthlyVolume"]').click() # time.sleep(1) # driver.find_element_by_xpath( # '//ul[@id="businessAverageMonthlyVolume-menu"]//li[text()="Up to USD $4,999"]').click() # time.sleep(1) driver.find_element_by_xpath( '//input[@label="Street address"]').send_keys(address) time.sleep(1) driver.find_element_by_xpath('//input[@label="City"]').send_keys( city) time.sleep(1) driver.find_element_by_xpath( '//*[@id="homeAddress"]/div[4]/div').click() time.sleep(1) driver.find_element_by_xpath('//li[text()="%s"]' % full_state).click() time.sleep(1) driver.find_element_by_xpath( '//input[@label="ZIP code"]').send_keys(zip_num) time.sleep(1) driver.find_element_by_xpath( '//input[@id="dateOfBirth"]').send_keys(birthdate) time.sleep(1) driver.find_element_by_xpath( '//input[@id="mobilePhoneNumber"]').send_keys(phone_num) time.sleep(1) driver.find_element_by_xpath('//input[@id="ssn"]').send_keys(ssn) time.sleep(1) driver.find_element_by_xpath( '//label[input[@id="agreementAccepted"]]').click() time.sleep(1) driver.find_element_by_xpath( '//button[@id="newUserSubmitButton"]').click() here_success_text_XP = '''//p[text()="You're ready to go."]''' here_success_text_flag = explicit_wait( driver, "VOEL", [here_success_text_XP, "XPath"], 8, False) if here_success_text_flag: here_success = 1 else: here_false_XP = '//a[text()="Summary"]' here_false_flag = explicit_wait(driver, "VOEL", [here_false_XP, "XPath"], 3, False) if here_false_flag: here_success = 0 else: here_success = -1 else: here_success = -1 return here_success
def click_our_pin(driver, conn, homefeed_url, step_flag, current_time, scroll_num, pin_self_count, search_words_count, account_id): print('Start searching for our images') sql = "SELECT count(-1) AS allnum FROM pin_history WHERE account_id=%s AND add_time>=%s" pin_count = conn.op_select_one(sql, (account_id, current_time))['allnum'] if pin_count < int(pin_self_count): sql = "SELECT web_url FROM follow_url" results = conn.op_select_all(sql) http_in_sql_list = [] for res in results: http_in_sql = res['web_url'] http_in_sql_list.append(http_in_sql) sql = "SELECT * FROM search_words WHERE word_type=100 ORDER BY RAND() LIMIT %s" key_wrods = conn.op_select_all(sql, search_words_count) if key_wrods: driver.get(homefeed_url) time.sleep(5) for key_wrod in key_wrods: search_key_words = key_wrod['word'] board_name = key_wrod['boards'] input_search_XP = '//input[@name="q"]' input_search_flag = explicit_wait(driver, "VOEL", [input_search_XP, "XPath"], 5, False) if not input_search_flag: input_search_XP = '//input[@name="searchBoxInput"]' # try: # driver.find_element_by_xpath('//button[@aria-label="Remove search input"]').click() # except: # pass time.sleep(1) driver.find_element_by_xpath(input_search_XP).click() time.sleep(1) # ctrl + a win32api.keybd_event(17, 0, 0, 0) win32api.keybd_event(65, 0, 0, 0) win32api.keybd_event(65, 0, win32con.KEYEVENTF_KEYUP, 0) win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(1) # Backspace win32api.keybd_event(8, 0, 0, 0) win32api.keybd_event(8, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(1) driver.find_element_by_xpath(input_search_XP).send_keys( search_key_words) time.sleep(3) win32api.keybd_event(13, 0, 0, 0) win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0) for _ in range(scroll_num): web_pin_arr_XP = '//div[@data-grid-item="true"]' web_pin_arr_flag = explicit_wait(driver, "VOEL", [web_pin_arr_XP, "XPath"], 10, False) if web_pin_arr_flag: web_pin_arr = driver.find_elements_by_xpath( web_pin_arr_XP) for web_pin_one in web_pin_arr: try: ActionChains(driver).move_to_element( web_pin_one).perform() time.sleep(3) write_txt_time() except: pass try: web_pin_XP = '//a[@rel="nofollow"]//div[2]/div' web_pin_flag = explicit_wait( driver, "VOEL", [web_pin_XP, "XPath"], 3, False) if web_pin_flag: web_pin_url = driver.find_element_by_xpath( web_pin_XP).text if web_pin_url in http_in_sql_list: time.sleep(1) pin_pic_url = web_pin_one.find_element_by_xpath( './/div[@class="pinWrapper"]//img' ).get_attribute('src') save_pic(driver, conn, homefeed_url, account_id, step_flag, board_name, 1, pin_pic_url) sql = "SELECT count(-1) AS allnum FROM pin_history WHERE account_id=%s AND add_time>=%s" pin_count = conn.op_select_one( sql, (account_id, current_time))['allnum'] except: pass if pin_count >= int(pin_self_count): break write_txt_time() if pin_count >= int(pin_self_count): break else: win32api.keybd_event(35, 0, 0, 0) win32api.keybd_event(35, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(5) if pin_count >= int(pin_self_count): break write_txt_time() else: print('Saved enough!')
def upload_pic(browser, logger, conn, process_flag, current_time, account_id, username, upload_web, upload_pic_min, upload_pic_max): all_upload_num = random.randint(upload_pic_min, upload_pic_max) logger.info('Start uploading %s images...' % all_upload_num) upload_web_split = upload_web.split('.') upload_web_replace = upload_web_split[-2] + '.' + upload_web_split[-1] save_error = 0 while True: table_name = None upload_flag = 1 replace_domain = 0 save_time = (datetime.datetime.utcnow() + datetime.timedelta(hours=8)).strftime("%Y-%m-%d %H:%M:%S") sql = 'SELECT * FROM upload_url where url=%s' result_1 = conn.op_select_one(sql, upload_web) if result_1: data_type = result_1['data_type'] sql = 'SELECT * FROM database_relation WHERE data_type=%s' result_2 = conn.op_select_one(sql, data_type) if result_2: table_name = result_2['table_name'] if table_name: sql = "SELECT COUNT(-1) AS allnum FROM %s WHERE id_of_saved='%s' AND save_time>='%s'" % ( table_name, account_id, current_time) upload_num = conn.op_select_one(sql)['allnum'] if upload_num < all_upload_num: random_time = random.randint(10, 30) time.sleep(random_time) if upload_web == 'original': sql = 'SELECT * FROM pin_upload WHERE saved=0 and data_type=%s ORDER BY RAND() LIMIT 1' result = conn.op_select_one(sql, upload_web) elif data_type == 'binding.domain.zhishuai.online': sql = 'SELECT * FROM %s WHERE saved=0 and belong_web="%s" ORDER BY RAND() LIMIT 1' % ( table_name, upload_web) result = conn.op_select_one(sql) else: replace_domain = 1 sql = 'SELECT * FROM %s WHERE saved=0 and data_type="%s" ORDER BY RAND() LIMIT 1' % ( table_name, data_type) result = conn.op_select_one(sql) if result: upload_pic_path = result['savelink'] if replace_domain == 1: upload_pic_path = upload_pic_path.replace( 'xxx.com', upload_web_replace) upload_pic_board = result['saveboard'] upload_pic_id = result['id'] browser.get(upload_pic_path) select_board_XP = "//div//h3[text()='%s']/../../../.." % upload_pic_board select_board_XP_flag = explicit_wait( browser, logger, "VOEL", [select_board_XP, "XPath"], 10, False) if select_board_XP_flag: select_board = browser.find_elements_by_xpath( select_board_XP)[-1] browser.execute_script( "arguments[0].scrollIntoView();", select_board) for _ in range(2): win32api.keybd_event(38, 0, 0, 0) win32api.keybd_event(38, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(3) try: (ActionChains(browser).move_to_element( select_board).click().perform()) except: pass else: create_board_XP = "//a[contains(@href,'/board/create/')]" create_board_XP_flag = explicit_wait( browser, logger, "VOEL", [create_board_XP, "XPath"], 5, False) if create_board_XP_flag: create_board = browser.find_element_by_xpath( create_board_XP) try: (ActionChains(browser).move_to_element( create_board).click().perform()) except: pass input_board_name_XP = '//input[@id="boardNameInput"]' input_board_name_flag = explicit_wait( browser, logger, "VOEL", [input_board_name_XP, "XPath"], 10, False) if input_board_name_flag: time.sleep(2) browser.find_element_by_xpath( input_board_name_XP).send_keys( upload_pic_board) create_button = browser.find_element_by_xpath( "//div[text()='Create']/..") (ActionChains(browser).move_to_element( create_button).click().perform()) else: logger.info('Image save failed, Element not found') upload_flag = 0 if upload_flag == 1: time.sleep(5) current_url = get_current_url(browser) # upload_pic_board_replace = upload_pic_board.lower().replace('amp;', '').replace(',', '').replace('&', '').split(' ') # url_board_name = '' # for i in upload_pic_board_replace: # if i: # if url_board_name: # url_board_name = url_board_name + '-' + i # else: # url_board_name = url_board_name + i if username.lower() in current_url.lower(): logger.info( 'Image {} upload done!'.format(upload_pic_id)) write_txt_time() sql = "UPDATE %s SET saved=1, id_of_saved='%s', save_time='%s' WHERE id='%s'" % ( table_name, account_id, save_time, upload_pic_id) conn.op_commit(sql) else: save_error += 1 if save_error > 3: sql = "UPDATE account SET upload_done=4 WHERE id=%s" conn.op_commit(sql, account_id) break else: sql = "UPDATE account SET upload_done=9 WHERE id=%s" conn.op_commit(sql, account_id) logger.info('There is no data on this domain!') write_txt_time() break else: logger.info('Enough pictures have been uploaded for today!') write_txt_time() break time.sleep(2)
def follow(browser, logger, conn, homefeed_url, account_id, follow_num, current_time): sql = 'SELECT * FROM main_promotion_account WHERE account_id=%s' is_exist = conn.op_select_one(sql, account_id) if not is_exist: sql = 'SELECT COUNT(1) AS all_count FROM follow_history WHERE follow_id=%s AND followed_time=%s' follow_count = conn.op_select_one( sql, (account_id, current_time))['all_count'] if follow_count < follow_num: sql = 'SELECT user_id, follow_id FROM follow_history WHERE follow_id=%s AND user_id IN (SELECT account_id FROM main_promotion_account)' results1 = conn.op_select_all(sql, account_id) user_in_history_lst = [] if results1: for r1 in results1: user_id = r1['user_id'] user_in_history_lst.append(user_id) sql = 'SELECT account_id FROM main_promotion_account WHERE status=1' results2 = conn.op_select_all(sql) if results2: main_promotion_account_lst = [] for r2 in results2: main_promotion_account_id = r2['account_id'] main_promotion_account_lst.append( main_promotion_account_id) # 删除已经follow的推广账户id,获得剩余未follow的推广账户id if user_in_history_lst: for del_id in user_in_history_lst: main_promotion_account_lst.remove(del_id) if main_promotion_account_lst: if len(main_promotion_account_lst) >= follow_num: follow_lst = random.sample(main_promotion_account_lst, follow_num) else: follow_lst = main_promotion_account_lst logger.info('Turn on the follow function, count:', len(follow_lst)) for follow_id in follow_lst: sql = 'SELECT account_home_url FROM main_promotion_account WHERE account_id=%s' res_follow_url = conn.op_select_one(sql, follow_id) if res_follow_url: follow_url = res_follow_url['account_home_url'] try: browser.get(follow_url) except: pass follow_XP = "//div[@id='__PWS_ROOT__']//div//div//div//div//div//div//div//div//div//div//div//div//div//div//div//div//div//div//div//div//button" follow_flag = explicit_wait(browser, logger, "VOEL", [follow_XP, "XPath"], 15, False) if follow_flag: follow_state = follow_flag.find_element_by_xpath( './div').text if follow_state == 'Follow': try: browser.find_element_by_xpath( follow_XP).click() time.sleep(1) except: pass else: try: follow_state = browser.find_element_by_xpath( "//div[@id='__PWS_ROOT__']//div//div//div//div//div//div//div//div//div//div//div//div//div//div//div//button/div" ).text if follow_state == 'Follow': browser.find_element_by_xpath( "//div[@id='__PWS_ROOT__']//div//div//div//div//div//div//div//div//div//div//div//div//div//div//div//button" ).click() time.sleep(1) except: pass sql = 'INSERT INTO follow_history (user_id, follow_id, followed_time) VALUES (%s, %s, %s)' conn.op_commit(sql, (follow_id, account_id, current_time)) write_txt_time() browser.get(homefeed_url) else: logger.info( 'There are no more accounts that need to be followed') else: logger.info('Today we have followed!') else: logger.info('Is promotion account, Ban follow!')
def click_our_pin(browser, logger, conn, homefeed_url, process_flag, current_time, scroll_num, pin_self_count, search_words_count, account_id): logger.info('Start searching for our images') sql = "SELECT count(-1) AS allnum FROM pin_history WHERE account_id=%s AND add_time>=%s" pin_count = conn.op_select_one(sql, (account_id, current_time))['allnum'] if pin_count < int(pin_self_count): sql = "SELECT web_url FROM website_url WHERE status=1" results = conn.op_select_all(sql) http_in_sql_list = [] for res in results: http_in_sql = res['web_url'] http_in_sql_list.append(http_in_sql) sql = "SELECT * FROM search_words WHERE word_type=1 ORDER BY RAND() LIMIT %s" key_wrods = conn.op_select_all(sql, search_words_count) if key_wrods: browser.get(homefeed_url) time.sleep(5) for key_wrod in key_wrods: search_key_words = key_wrod['word'] board_name = key_wrod['boards'] board_name_encode = quote(board_name, 'utf-8') search_url = """https://www.pinterest.com/search/pins/?q={}&rs=typed""".format( board_name_encode) board_name_split = board_name.split(' ') for _ in board_name_split: search_url += "&term_meta[]={}%7Ctyped".format(_.strip()) # 个人号搜索键 # input_search_XP = '//input[@name="searchBoxInput"]' # input_search_flag = explicit_wait( # browser, "VOEL", [input_search_XP, "XPath"], 10, False) # if not input_search_flag: # 商业号搜索键 # input_search_XP = "//div[@id='searchBoxContainer']//button" # browser.find_element_by_xpath(input_search_XP).click() # time.sleep(1) for _ in range(scroll_num): web_pin_arr_XP = '//div[@data-grid-item="true"]' web_pin_arr_flag = explicit_wait(browser, logger, "VOEL", [web_pin_arr_XP, "XPath"], 10, False) if web_pin_arr_flag: web_pin_arr = browser.find_elements_by_xpath( web_pin_arr_XP) for web_pin_one in web_pin_arr: try: ActionChains(browser).move_to_element( web_pin_one).perform() time.sleep(3) write_txt_time() except: pass try: web_pin_XP = '//a[@class="GestaltTouchableFocus"]/div/div[2]/div[1]' web_pin_flag = explicit_wait( browser, logger, "VOEL", [web_pin_XP, "XPath"], 3, False) if web_pin_flag: web_pin_url = browser.find_element_by_xpath( web_pin_XP).text if web_pin_url in http_in_sql_list: time.sleep(1) pin_pic_url = web_pin_one.find_element_by_xpath( './/div[@data-test-id="pinrep-image"]//img' ).get_attribute('src') save_pic(browser, conn, homefeed_url, account_id, process_flag, board_name, 1, pin_pic_url) sql = "SELECT count(-1) AS allnum FROM pin_history WHERE account_id=%s AND add_time>=%s" pin_count = conn.op_select_one( sql, (account_id, current_time))['allnum'] except: pass if pin_count >= int(pin_self_count): break write_txt_time() if pin_count >= int(pin_self_count): break else: win32api.keybd_event(35, 0, 0, 0) win32api.keybd_event(35, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(5) if pin_count >= int(pin_self_count): break write_txt_time() else: logger.info('Saved enough!')
def save_pic(driver, conn, homefeed_url, account_id, step_flag, board_name='like', belong=2, pin_pic_url=False): add_time = (datetime.datetime.utcnow() + datetime.timedelta(hours=8)).strftime("%Y-%m-%d %H:%M:%S") if not pin_pic_url: pin_pic_XP = '//a[@class="imageLink"]//img' pin_pic_flag = explicit_wait(driver, "VOEL", [pin_pic_XP, "XPath"], 3, False) if pin_pic_flag: pin_pic_url = driver.find_element_by_xpath( pin_pic_XP).get_attribute('src') saved_XP = '//div[@data-test-id="saved-info"]/div/a/span' saved_flag = explicit_wait(driver, "VOEL", [saved_XP, "XPath"], 3, False) if saved_flag: saved_text = driver.find_element_by_xpath(saved_XP).text if saved_text == 'Saved to ': print('The picture has been saved.') else: if belong == 2: sql = 'SELECT * FROM other_pin_history WHERE pin_pic_url=%s AND id=%s' elif belong == 1: sql = 'SELECT * FROM pin_history WHERE pin_pic_url=%s AND id=%s' result = conn.op_select_one(sql, (pin_pic_url, account_id)) if result: print('The picture has been saved.') else: board_select_XP = '//div[@data-test-id="boardSelectionDropdown"]' board_select_flag = explicit_wait(driver, "VOEL", [board_select_XP, "XPath"], 10, False) if board_select_flag: board_select = driver.find_element_by_xpath(board_select_XP) (ActionChains(driver).move_to_element( board_select).click().perform()) input_board_XP = '//input[@id="pickerSearchField"]' input_board_flag = explicit_wait(driver, "VOEL", [input_board_XP, "XPath"], 10, False) if input_board_flag: driver.find_element_by_xpath(input_board_XP).send_keys( board_name) time.sleep(5) try: choice_board = driver.find_elements_by_xpath( '//div[@data-test-id="boardWithoutSection"]//div[text()="%s"]' % board_name) (ActionChains(driver).move_to_element( choice_board[0]).click().perform()) time.sleep(2) except Exception as e: # print(e) create_XP = '//div[@data-test-id="create-board"]/div' create_flag = explicit_wait(driver, "VOEL", [create_XP, "XPath"], 10, False) if create_flag: driver.find_element_by_xpath(create_XP).click() step_flag = input_board_text(driver, board_name, 1) if step_flag == 1: if belong == 2: sql = 'INSERT INTO other_pin_history (account_id, pin_pic_url, add_time) VALUES (%s, %s, %s)' elif belong == 1: sql = 'INSERT INTO pin_history (account_id, pin_pic_url, add_time) VALUES (%s, %s, %s)' conn.op_commit(sql, (account_id, pin_pic_url, add_time)) else: driver.get(homefeed_url) write_txt_time()
def save_pic(browser, logger, conn, homefeed_url, account_id, process_flag, board_name='like', belong=2, pin_pic_url=False, send_keys=1): add_time = (datetime.datetime.utcnow() + datetime.timedelta(hours=8)).strftime("%Y-%m-%d %H:%M:%S") if not pin_pic_url: pin_pic_XP = "//body/div[@id='__PWS_ROOT__']/div/div/div/div/div/div/div/div/div/div/div/div/div/div/div/div/div/div/div/a/div/div/div/img[1]" pin_pic_flag = explicit_wait(browser, logger, "VOEL", [pin_pic_XP, "XPath"], 3, False) if pin_pic_flag: pin_pic_url = browser.find_element_by_xpath( pin_pic_XP).get_attribute('src') saved_XP = "//span[contains(text(),'Saved to')]" saved_flag = explicit_wait(browser, logger, "VOEL", [saved_XP, "XPath"], 5, False) if saved_flag: logger.info('The picture has been saved.') else: if belong == 2: sql = 'SELECT * FROM other_pin_history WHERE pin_pic_url=%s AND id=%s' elif belong == 1: sql = 'SELECT * FROM pin_history WHERE pin_pic_url=%s AND id=%s' result = conn.op_select_one(sql, (pin_pic_url, account_id)) if result: logger.info('The picture has been saved.') else: board_select_XP = '//button[@data-test-id="PinBetterSaveDropdown"]' board_select_flag = explicit_wait(browser, logger, "VOEL", [board_select_XP, "XPath"], 10, False) if board_select_flag: board_select = browser.find_element_by_xpath(board_select_XP) (ActionChains(browser).move_to_element( board_select).click().perform()) input_board_XP = '//input[@id="pickerSearchField"]' input_board_flag = explicit_wait(browser, logger, "VOEL", [input_board_XP, "XPath"], 10, False) if input_board_flag: browser.find_element_by_xpath(input_board_XP).send_keys( board_name) time.sleep(5) try: choice_board = browser.find_elements_by_xpath( '//div[@data-test-id="boardWithoutSection"]//div[text()="%s"]' % board_name) (ActionChains(browser).move_to_element( choice_board[0]).click().perform()) time.sleep(2) except Exception as e: create_XP = '//div[@data-test-id="create-board"]/div' create_flag = explicit_wait(browser, logger, "VOEL", [create_XP, "XPath"], 10, False) if create_flag: browser.find_element_by_xpath(create_XP).click() process_flag = input_board_text( browser, board_name, 1, send_keys) if process_flag == 1: if belong == 2: sql = 'INSERT INTO other_pin_history (account_id, pin_pic_url, add_time) VALUES (%s, %s, %s)' elif belong == 1: sql = 'INSERT INTO pin_history (account_id, pin_pic_url, add_time) VALUES (%s, %s, %s)' conn.op_commit(sql, (account_id, pin_pic_url, add_time)) else: browser.get(homefeed_url) write_txt_time()
def login_user(browser, logger, conn, proxy_ip, login_url, main_url, account_id, email, username, password, cookies): if not check_browser(browser, logger, proxy_ip): login_state = 2 return login_state web_address_navigator(browser, login_url) current_url = get_current_url(browser) if 'www.pinterest.com' not in current_url: cookies = False cookie_loaded = None login_state = None if cookies: try: for cookie in json.loads(cookies): if "sameSite" in cookie and cookie["sameSite"] == "None": cookie["sameSite"] = "Strict" browser.add_cookie(cookie) cookie_loaded = True logger.info("- Cookie for user '{}' loaded...".format(email)) # force refresh after cookie load or check_authorization() will FAIL reload_webpage(browser) # cookie has been LOADED, so the user SHOULD be logged in login_state = check_authorization(browser, email, "activity counts", logger, False) except: login_state = 0 if login_state == 1 and cookie_loaded: logger.info("Logged in successfully!") login_state = 1 return login_state # if user is still not logged in, then there is an issue with the cookie # so go create a new cookie. if cookie_loaded: logger.info( "- Issue with cookie for user '{}'. Creating new cookie...".format( email)) # Error could be faced due to "<button class="sqdOP L3NKy y3zKF" # type="button"> Cookie could not be loaded" or similar. # Session displayed we are in, but then a failure for the first # `login_elem` like the element is no longer attached to the DOM. # Saw this issue when session hasn't been used for a while; wich means # "expiry" values in cookie are outdated. try: # Since having issues with the cookie a new one can be generated, # if cookie cannot be created or deleted stop execution. logger.info("- Deleting browser cookies...") browser.delete_all_cookies() browser.refresh() time.sleep(random.randint(3, 5)) except Exception as e: # NF: start if isinstance(e, WebDriverException): logger.exception( "Error occurred while deleting cookies from web browser!\n\t{}" .format(str(e).encode("utf-8"))) login_state = 3 return login_state # NF: end web_address_navigator(browser, login_url) input_username_XP = read_xpath(login_user.__name__, "input_username_XP") explicit_wait(browser, logger, "VOEL", [input_username_XP, "XPath"], 35) # user input_username = browser.find_element_by_xpath(input_username_XP) (ActionChains(browser).move_to_element(input_username).click().send_keys( email).perform()) input_password = browser.find_elements_by_xpath( read_xpath(login_user.__name__, "input_password")) if not isinstance(password, str): password = str(password) (ActionChains(browser).move_to_element( input_password[0]).click().send_keys(password).perform()) sleep(1) (ActionChains(browser).move_to_element( input_password[0]).click().send_keys(Keys.ENTER).perform()) sleep(3) # check for wrong username or password message, and show it to the user try: error_alert = browser.find_element_by_xpath( "//*[contains(text(), 'The password you entered is incorrect')]") logger.warn(error_alert.text) login_state = 4 return login_state except NoSuchElementException: pass try: error_alert = browser.find_element_by_xpath( "//*[contains(text(), 'Safe mode alert')]") logger.warn(error_alert.text) login_state = 5 return login_state except NoSuchElementException: pass try: error_alert = browser.find_element_by_xpath( "//*[contains(text(), 'Your account has been suspended.')]") logger.warn(error_alert.text) login_state = 99 return login_state except NoSuchElementException: pass try: error_alert = browser.find_element_by_xpath( "//*[contains(text(), 'Want fresh ideas in your feed')]") logger.warn(error_alert.text) reload_webpage(browser) except NoSuchElementException: pass explicit_wait(browser, logger, "PFL", [], 5) # Check if user is logged-in (If there's two 'nav' elements) nav = browser.find_elements_by_xpath(read_xpath(login_user.__name__, "nav")) if len(nav) == 1: logger.info("Logged in successfully!") login_state = 1 # create cookie for username and save it cookies_list = browser.get_cookies() for cookie in cookies_list: if "sameSite" in cookie and cookie["sameSite"] == "None": cookie["sameSite"] = "Strict" cookies_list = json.dumps(cookies_list) sql = 'UPDATE account SET cookies=%s WHERE id=%s' conn.op_commit(sql, (cookies_list, account_id)) return login_state else: login_state = 0 return login_state
def upload_pic(driver, conn, step_flag, current_time, account_id, upload_web, upload_pic_min, upload_pic_max): all_upload_num = random.randint(upload_pic_min, upload_pic_max) print('Start uploading %s images...' % all_upload_num) while True: upload_flag = 1 save_time = (datetime.datetime.utcnow() + datetime.timedelta(hours=8)).strftime("%Y-%m-%d %H:%M:%S") sql = "SELECT COUNT(-1) AS allnum FROM pin_upload WHERE belong_web=%s AND save_time>=%s" upload_num = conn.op_select_one(sql, (upload_web, current_time))['allnum'] if upload_num < all_upload_num: sql = 'SELECT * FROM pin_upload WHERE saved=0 and belong_web=%s ORDER BY RAND() LIMIT 1' result = conn.op_select_one(sql, upload_web) if result: upload_pic_path = result['savelink'] upload_pic_path = upload_pic_path.replace( 'http://guanli.lianstone.net', 'http://guanli2.lianstone.net') upload_pic_board = result['saveboard'] upload_pic_id = result['id'] driver.get(upload_pic_path) input_pic_board_XP = "//input[@id='pickerSearchField']" input_pic_board_flag = explicit_wait( driver, "VOEL", [input_pic_board_XP, "XPath"], 10, False) if input_pic_board_flag: driver.find_element_by_xpath(input_pic_board_XP).send_keys( upload_pic_board) else: print('Image save failed, Element not found') upload_flag = 0 if upload_flag == 1: try: win32api.keybd_event(13, 0, 0, 0) win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(5) except Exception as e: pass need_create_board_XP = '//input[@name="boardName"]' need_create_board_flag = explicit_wait( driver, "VOEL", [need_create_board_XP, "XPath"], 5, False) if need_create_board_flag: driver.find_element_by_xpath( "//div[@class='mainContainer']//div[1]/div/button" ).click() time.sleep(2) if driver.page_source.find( 'Sorry! We blocked this link because it may lead to spam.' ) > -1: print('Domain name banned!') sql = "UPDATE account SET upload_done=4 WHERE id=%s" conn.op_commit(sql, account_id) upload_flag = 0 break else: saved_succ_XP = '//h5[starts-with(text(), "Saved to")]' saved_succ_flag = explicit_wait( driver, "VOEL", [saved_succ_XP, "XPath"], 8, False) if saved_succ_flag: sql = "UPDATE pin_upload SET saved=1, save_time=%s WHERE id=%s" conn.op_commit(sql, (save_time, upload_pic_id)) time.sleep(3) else: sql = "UPDATE account SET upload_done=9 WHERE id=%s" conn.op_commit(sql, account_id) print('There is no data on this domain!') break write_txt_time() else: print('Enough pictures have been uploaded for today!') break time.sleep(2)