Advertisement
Guest User

Python Code

a guest
Mar 26th, 2016
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.40 KB | None | 0 0
  1. #!/usr/bin/env python
  2. #-*- coding: utf-8 -*-
  3. try:
  4. from splinter import Browser
  5. except:
  6. print "Please install Splinter: http://splinter.readthedocs.org/en/latest/install.html"
  7. sys.exit()
  8.  
  9.  
  10. import sys, getopt, re, os
  11. from datetime import datetime
  12. from splinter.request_handler.status_code import HttpResponseError
  13. import getpass
  14.  
  15.  
  16. def main(argv):
  17. d = datetime.now()
  18. date = str(d.year) + '' + str(d.month) + '' + str(d.day) + '' + str(d.hour) + '' + str(d.minute) + '' + str(d.second)
  19. username = None
  20. txt = None
  21. try:
  22. opts, args = getopt.getopt(argv, "hi:u:", ["file=", "user=", "help"])
  23. except getopt.GetoptError:
  24. print 'Use --help for help'
  25. sys.exit(2)
  26.  
  27. for opt, arg in opts:
  28. if opt in ("-h", "--help"):
  29. print 'Usage: %s <options> \n' % (os.path.basename(__file__))
  30. print ' -h, --help This help'
  31. print ' -u, --user USERNAME Your Twitter username'
  32. print ' -f, --file FILE File with twitter URLs list'
  33. sys.exit()
  34. elif opt in ("-i", "--file"):
  35. txt = arg
  36. elif opt in ("-u", "--user"):
  37. username = arg
  38.  
  39. if not username and not txt:
  40. print 'Use --help for help\n'
  41. print 'Usage: python twitterReport.py -u <Twitter username> -i <account_list.txt>'
  42. print 'The accounts list must have only 1 account per line'
  43. sys.exit()
  44.  
  45. password = getpass.getpass()
  46.  
  47. # comment this line if you want to use privoxy + tor:
  48. with Browser() as browser:
  49. # uncomment this section if you want to use privoxy + tor:
  50. # proxyIP = '127.0.0.1'
  51. # proxyPort = 8118
  52. #
  53. # proxy_settings = {'network.proxy.type': 1,
  54. # 'network.proxy.http': proxyIP,
  55. # 'network.proxy.http_port': proxyPort,
  56. # 'network.proxy.ssl': proxyIP,
  57. # 'network.proxy.ssl_port':proxyPort,
  58. # 'network.proxy.socks': proxyIP,
  59. # 'network.proxy.socks_port':proxyPort,
  60. # 'network.proxy.ftp': proxyIP,
  61. # 'network.proxy.ftp_port':proxyPort
  62. # }
  63. #
  64. # with Browser('firefox',profile_preferences=proxy_settings) as browser:
  65. browser.visit("https://twitter.com/login")
  66. browser.execute_script("$('.js-username-field').val('%s');" % (username))
  67. browser.execute_script("$('.js-password-field').val('%s');" % (password))
  68. browser.find_by_css("button[type='submit'].submit.btn.primary-btn").click()
  69.  
  70. if "https://twitter.com/login/error" in browser.url:
  71. print "The email and password you entered did not match our records."
  72. sys.exit()
  73.  
  74. try:
  75. file = open(txt, 'r')
  76. except:
  77. sys.exit("Unable to open file %s" % txt)
  78.  
  79. for line in file:
  80. try:
  81. url_r = re.match(r"(?:https:\/\/)?(?:http:\/\/)?(?:www\.)?twitter\.com/(#!/)?@?([^/\s]*)(/user\?user_id=\d+)?", line.strip())
  82. url = url_r.group()
  83. browser.visit(url)
  84. is_suspended = browser.is_element_present_by_css('.route-account_suspended')
  85. if url_r.lastindex == 3 and not is_suspended:
  86. browser.find_by_id('ft').find_by_css('.alternate-context').click()
  87. if not is_suspended:
  88. browser.find_by_css('.user-dropdown').click()
  89. browser.find_by_css('li.report-text button[type="button"]').click()
  90. with browser.get_iframe('new-report-flow-frame') as iframe:
  91. iframe.find_by_css("input[type='radio'][value='abuse']").check()
  92. browser.find_by_css('.new-report-flow-next-button').click()
  93. with browser.get_iframe('new-report-flow-frame') as iframe:
  94. iframe.find_by_css("input[type='radio'][value='harassment']").check()
  95. browser.find_by_css('.new-report-flow-next-button').click()
  96. with browser.get_iframe('new-report-flow-frame') as iframe:
  97. iframe.find_by_css("input[type='radio'][value='Someone_else']").check()
  98. browser.find_by_css('.new-report-flow-next-button').click()
  99. with browser.get_iframe('new-report-flow-frame') as iframe:
  100. iframe.find_by_css("input[type='radio'][value='violence']").check()
  101. browser.find_by_css('.new-report-flow-next-button').click()
  102.  
  103. followers = browser.find_by_css('.ProfileNav-item--followers .ProfileNav-value').first.text
  104. user_id = browser.find_by_css("div[data-user-id].ProfileNav").first['data-user-id']
  105.  
  106. twitter_name = url_r.group(2)
  107.  
  108. if 'intent' in twitter_name:
  109. twitter_name = browser.find_by_css('.ProfileCardMini-screenname .u-linkComplex-target').first.text
  110.  
  111. msg = "https://twitter.com/intent/user?user_id=%s - %s - %s Followers" % (user_id, twitter_name, followers)
  112.  
  113. with open("log_reported_"+date+".txt", "a") as log:
  114. log.write(msg+"\n")
  115. elif browser.is_element_present_by_css('.route-account_suspended'):
  116. msg = line.strip()+' - Suspended'
  117. with open("log_suspended.txt", "a") as log:
  118. log.write(msg+"\n")
  119. else:
  120. msg = line.strip()+' - Unknown'
  121. with open("log_unknown.txt", "a") as log:
  122. log.write(msg+"\n")
  123.  
  124. print msg
  125.  
  126. except KeyboardInterrupt:
  127. print 'Quit by keyboard interrupt sequence!'
  128. break
  129. except HttpResponseError as e:
  130. msg = '%s - %s' % (line.strip(), e)
  131. print msg
  132. with open("log_Error.txt", "a") as log:
  133. log.write(msg+"\n")
  134. except:
  135. if line:
  136. msg = '%s - Error' % (line.strip())
  137. print msg
  138. with open("log_Error.txt", "a") as log:
  139. log.write(msg+"\n")
  140. else:
  141. pass
  142.  
  143. if __name__ == "__main__":
  144. try:
  145. main(sys.argv[1:])
  146. except KeyboardInterrupt:
  147. sys.stdout.write('\nQuit by keyboard interrupt sequence!')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement