selenium python不会登录社交媒体

时间:2017-10-14 11:52:26

标签: python selenium instagram

所以我对selenium很新,我跟着文档做了一些机器人, 但是当我尝试登录社交媒体网络(twitter / instagram)时,它不会发送笔画。

代码:

#!usr/bin/env python3
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Firefox()
browser.get("https://www.instagram.com/accounts/login/")
elem = browser.find_element_by_name("username")
elem.send_keys('Laptops' + Keys.RETURN)
time.sleep(4)
browser.quit()

我已经通过使用browser.get_element_by_name / class / xpath尝试了它,但似乎没有任何效果。 错误代码:

Traceback (most recent call last):
  File "ig.py", line 50, in <module>
    login(driver)
  File "ig.py", line 15, in login
    driver.find_element_by_xpath("//div/input[@name='username']").send_keys(username)
  File "/home/lario/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 365, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "/home/lario/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 843, in find_element
    'value': value})['value']
  File "/home/lario/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 308, in execute
    self.error_handler.check_response(response)
  File "/home/lario/.local/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: //div/input[@name='username']

OS = ubuntu17 驱动=火狐/ geckodriver python3.6 selenium3.6

我知道这段代码无法工作bc你需要一个密码和一个用户名,但它甚至不执行send_keys代码,因为tHAT上面的行有错误

2 个答案:

答案 0 :(得分:0)

我在linux上的Firefox驱动程序也遇到了一些问题。 我复制了你的代码,只是将驱动程序更改为Chrome并且运行正常。 您可以在此处获取Chrome驱动程序: http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.chrome.webdriver

答案 1 :(得分:0)

尝试添加等待状态。但是,如果在执行某些检查之前禁用该元素,则可能需要EC.element_to_be_clickable。

FilmDatabase filmList = new FilmDatabase();
    filmList = filmList.listInput("MainDBTest.txt");

    int listLen = filmList.getFilmDB().size();
    Object[][] filmTable = new Object[listLen][5];

    for (int x = 0; x < listLen; x++) {
        for(Film film : filmList.getFilmDB()) {
            //System.out.println(film);
            filmTable[x][0] = film.getFilmName();
            filmTable[x][1] = film.getFilmRating();
            filmTable[x][2] = film.getReleaseDate();
            filmTable[x][3] = film.getFilmGenre();
            filmTable[x][4] = film.getFilmCast();
            System.out.println(film);
        }
    }

    Object columnNames[] = { "Title", "Rating", "Year", "Genre", "Cast" };
    JTable mainTable = new JTable(filmTable, columnNames);